home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / plain / contrib / mtex / mtex.tex < prev    next >
Encoding:
Text File  |  1990-08-16  |  84.1 KB  |  1,977 lines

  1. %                                                                       %
  2. % Copyright (C) 1986,1987 by Andrea Steinbach and Angelika Schofer      %
  3. %                                                                       %
  4. %                                                                       %
  5. % 10.11.87 \def\hunkglue ge"andert. (welche Auswirkungen hat das,       %
  6. %                ausser dass \two... einen Fehler weniger macht???)     %
  7. % 16.11.87 \def\intslurwidth ge"andert (vor division += \seminhw        %
  8. % 16.11.87 \def\gradientslur ge"andert (vor division += .5\seminhh      %
  9. %                                                                       %
  10. \def\fmtname{MTeX}\def\fmtversion{0.92}
  11. \immediate\write10{MTeX Version 0.92 - Release  16 November 1987}
  12. %                                                                       %
  13. %               INHALTSVERZEICHNIS                                      %
  14. %                                                                       %
  15. % Allgemeine Vereinbarungen ......................................... 2 %
  16. % Definitionen der neuen Zeichensaetze .............................. 2 %
  17. % Definitionen der neuen Character .................................. 2 %
  18. % Registerdefinitionen: Count,Box,Dimen usw ......................... 3 %
  19. % Registerinitialisierungen ......................................... 6 %
  20. % Punktierung ....................................................... 7 %
  21. % Hilfsfunktionen - Hilfsmacros ..................................... 8 %
  22. % Macros zur Listenerzeugung und Verarbeitung .......................10 %
  23. % Notenlinien und Hilfslinien .......................................11 %
  24. % Taktstriche u. ae. ................................................12 %
  25. % Das Setzen der Versetzungszeichen .................................13 %
  26. % Versetzungszeichen - Eingabemacros ................................14 %
  27. % Noten              - Eingabemacros ................................14 %
  28. % Pausen             - Eingabemacros ................................14 %
  29. % Wertpunkte ........................................................15 %
  30. % Akkorde            - Eingabemacros ................................16 %
  31. % Konstruktion der Noten und Pausen .................................16 %
  32. % Berechnung der Notenhalslaengen ...................................17 %
  33. % Konstruktion der Notenhaelse ......................................18 %
  34. % Das Setzen der Noten ..............................................18 %
  35. % Tonarten und Aufloesung, Notenschluessel und Taktangabe ...........19 %
  36. % Die Verarbeitung der Nachbarschaften ..............................20 %
  37. % Die Initialisierung der Listen einer Notengruppe ..................20 %
  38. % Abarbeitung und Setzen einer Notengruppe ..........................21 %
  39. % Verbalkung - Eingabemacros ........................................21 %
  40. % Berechnungen der Halslaengen und Steigung .........................22 %
  41. % Plazierung und Zusammensetzung der Balken .........................24 %
  42. % Die Bogen .........................................................25 %
  43. % Akzente fuer Noten und Akkorde ....................................30 %
  44. % Textunterlage .....................................................31 %
  45. % Zweistimmige Notation in einem System .............................33 %
  46. % Beginn und Ende ...................................................33 %
  47. % Defaults ..........................................................34 %
  48. %                                                                       %
  49. %                                                                       %
  50. %      (Seitennummern bei Druck des Makropakets mit 60 Zeilen je Seite) %
  51. %                                                                       %
  52. %                                                                       %
  53. %                                                                       %
  54. %                                                                       %
  55. %                                                                       %
  56. %                                                                       %
  57. %                                                                       %
  58. %                                                                       %
  59. %                                                                       %
  60. %                                                                       %
  61. %                                                                       %
  62. %                                                                       %
  63. %                                                                       %
  64. %                                                                       %
  65. \catcode`@=11
  66. %       **************************************************              %
  67. %       *    Allgemeine Vereinbarungen                   *              %
  68. %       **************************************************              %
  69. \frenchspacing
  70. %\parindent 0pt
  71. % Parameter fuer Notensatz
  72. \def\inisong{\linepenalty10%\linepenalty100
  73.   \pretolerance=-1
  74.   \tolerance=200
  75.   \finalhyphendemerits=-1000
  76.   \hyphenpenalty=-1000
  77.   \exhyphenpenalty=-100
  78.   \doublehyphendemerits=-1000
  79.   \adjdemerits=1000
  80.   \adjdemerits=250
  81.   \interlinepenalty=-10 \inidefaults}%\inidefaults siehe DEFAULTS
  82. %\parfillskip0pt
  83. %       Dimensionen die  in PLAIN TEX eingefuehrt wurden
  84. %\newdimen\p@ \p@=1pt % this saves macro space and time
  85. %\newdimen\z@ \z@=0pt % can be used both for 0pt and 0
  86. %\newskip\z@skip \z@skip=0pt plus0pt minus0pt
  87. %\newbox\voidb@x % permanently void box register
  88. %       **************************************************              %
  89. %       *    Definition der neuen Zeichensaetze          *              %
  90. %       **************************************************              %
  91. \font\music=music16                         %Noten
  92. \font\smallmusic=music16                    %Noten(im Moment noch mit
  93.                                             %\music identisch
  94. \font\beamfont=beam16                       %Balken
  95. \font\slurfont=slur16                       %Bogen
  96. \font\slurfontuu=sluruu16                   %Bogen
  97. \font\slurfontud=slurud16                   %Bogen
  98. \font\slurfontdu=slurdu16                   %Bogen
  99. \font\slurfontdd=slurdd16                   %Bogen
  100. \font\eightrm   =cmr8
  101. %       **************************************************              %
  102. %       *    Definition der neuen Character              *              %
  103. %       **************************************************              %
  104. \catcode`\"=12
  105. \def\hex{"} % zum Eingeben von Zahlen in hex
  106. \def\3{\char"19{}}
  107. \catcode`\"=\active %Unlaute
  108. \def"{\accent'177}
  109. %
  110. \chardef\quart=\hex21                       %Notenkoepfe
  111. \chardef\half=\hex22
  112. \chardef\whole=\hex23
  113. \chardef\eighthup=\hex28                    %Faehnchen
  114. \chardef\eighthdown=\hex2D
  115. \chardef\sixteenthup=\hex29
  116. \chardef\sixteenthdown=\hex2E
  117. \chardef\thirtytwoup=\hex2A
  118. \chardef\thirtytwodown=\hex2F
  119. \chardef\sixtyfourup=\hex2B
  120. \chardef\sixtyfourdown=\hex30
  121. \chardef\hundredtwentyeightup=\hex2C
  122. \chardef\hundredtwentyeightdown=\hex31
  123. \chardef\wholerest=\hex3C                   %Pausen
  124. \chardef\halfrest=\hex3D
  125. \chardef\quartrest=\hex3E
  126. \chardef\eighthrest=\hex3F
  127. \chardef\sixteenthrest=\hex40
  128. \chardef\doublerest=\hex3A                  %Taktpausen
  129. \chardef\ddoublerest=\hex3B
  130. \chardef\fermateup=\hex50                   %Fermaten
  131. \chardef\fermatedown=\hex51
  132. \chardef\mflat=\hex32                       %Versetzungszeichen
  133. \chardef\mdoubleflat=\hex33
  134. \chardef\mquartflat=\hex37
  135. \chardef\mthreequartflat=\hex3A
  136. \chardef\msharp=\hex34
  137. \chardef\mdoublesharp=\hex35
  138. \chardef\mnatural=\hex36
  139. \chardef\mviolin=\hex47                     %Notenschluessel
  140. \chardef\mviolinoct=\hex47
  141. \chardef\mviolinOct=\hex47
  142. \chardef\mbass=\hex49
  143. \chardef\mbassoct=\hex49
  144. \chardef\mbassOct=\hex49
  145. \chardef\mbariton=\hex4D
  146. \chardef\mtenor=\hex4C
  147. \chardef\malt=\hex4B
  148. \chardef\mmezzosopran=\hex4E
  149. \chardef\msopran=\hex4E
  150. \chardef\mC=\hex53                          %Taktangaben
  151. \chardef\allabreve=\hex52
  152. \chardef\mCreverse=\hex54
  153. %       **************************************************              %
  154. %       *    Registerdefinitionen                        *              %
  155. %       **************************************************              %
  156. %1.Hilfsregister
  157. \newbox\hb@i                   % Hilfsbox
  158. \newbox\hb@ii                  % Hilfsbox
  159. \newbox\hb@iii                 % Hilfsbox
  160. \newbox\hb@iv                  % Hilfsbox
  161. \newdimen\hd@i                 % Hilfsdimension
  162. \newdimen\hd@ii                % Hilfsdimension
  163. \newdimen\hd@iii               % Hilfsdimension
  164. \newcount\hc@i                 % Hilfscount
  165. \newcount\hc@ii                % Hilfscount
  166. \newskip\hs@i                  % Hilfsskip
  167. \newskip\hs@ii                 % Hilfsskip
  168. \newskip\hs@iii                % Hilfsskip
  169. \newskip\hs@iv                 % Hilfsskip
  170. \newskip\hs@v                  % Hilfsskip
  171. \newskip\hs@vi                 % Hilfsskip
  172. \newskip\hs@vii                % Hilfsskip
  173. \newtoks\ht@i                  % Hilfstokenregister
  174. %2. Boxes fuer Notenkonstruktionen
  175. \newbox\notebox         %zum Setzen der Noten
  176. \newbox\leftbox         %Akkordnoten links vom Notenhals
  177. \newbox\rightbox        %Akkordnoten rechts vom Notenhals
  178. \newbox\dotbox          %Wertpunkte fuer Akkorde
  179. \newbox\akzentbox       %Akzente
  180. \newbox\hunkbox         %Hunks
  181. \newbox\h@nkbox         %Hunks im zweidimensionalen Satz
  182. \newbox\legerbox        %Hilfslinien
  183. \newbox\firstvoice      %erste Stimme bei Zweistimmiger Notation
  184. \newbox\secondvoice     %zweite Stimme bei Zweistimmiger Notation
  185. \newbox\placebox        %zum Setzen der Taktangabe
  186. \newbox\neighborhood    %Box zum Speichern der Nachbarschaft
  187. %3. Tokenregister
  188. \newtoks\notename       %Noten- oder Pausenwertname
  189. \newtoks\direction      %Richtung des Notenhalses up oder down
  190. \newtoks\d@rection      %Richtung des Notenhalses (global)
  191. \newtoks\cleftoks       %aktueller Notenschluessel
  192. \newtoks\signtoks       %aktuelle  Vorzeichnung
  193. \newtoks\canceltoks     %aktuelle  Aufloesung
  194. \newtoks\slurtoks       %zur Bestimmung des Charactercodes fuer Bogen
  195. \newtoks\ta             %fuer Listenverarbeitung ....
  196. \newtoks\tb             % .... bei \rightappend
  197. %4.Umgebungen
  198. \newif\iffirst          %erste Zeile Zeilenanfang: Initialisierung von
  199.                         %Notenschluessel, Tonart und Taktart
  200. \newif\ifbeam           %Verbalkung
  201. \newif\ifchord          %Akkord
  202. \newif\ifleft           %Plazieren der Akkordnoten links vom Notenhals
  203. \newif\ifstemup         %Notenhalsrichtung aufwaerts
  204. \newif\ifgroup          %Initialisierung der Nachbarschaftslisten
  205. \newif\iftwo            %zweistimmiger Notensatz
  206. \groupfalse\chordfalse\leftfalse\beamfalse\groupfalse\twofalse
  207. %5.Countregister
  208. \newcount\dur@tion
  209. %     \dur@tion           Notenwert
  210. %          0                   1/1
  211. %          1                   1/2
  212. %          2                   1/4
  213. %          3                   1/8
  214. %          4                   1/16
  215. %          5                   1/32
  216. %          6                   1/64
  217. %          7                   1/128
  218. \newcount\pitch                % interne Tonhoehe
  219. \newcount\pit@                 % interne Hilfstonhoehe
  220. \newcount\oldpitch             % interne Tonhoehe
  221. \global\oldpitch=0             % Anfangsbelegung
  222. \newcount\maxpitch             % maximale interne Tonhoehe bei Akkord
  223. \newcount\minpitch             % minimale interne Tonhoehe bei Akkord
  224. \newcount\nn                   % Anzahl der Hilfslinien
  225. \newcount\clefcount            % Parameter Verschieben der Vorzeichnung
  226.                                % abhaengig von Notenschluessel
  227. \newcount\accpitch             % Vozeichnungs Tonhoehe
  228.  %Nachbarschaften: Balken- und Bogengruppen
  229. \newcount\tieconst             % Konstante fuer Hoehe des Bogenstuecks
  230.                                % fuer Haltebogen
  231. \newcount\phraseconst          % konstantes Bogenstueck bei Phrasierungs-
  232.                                % bogen
  233. \newcount\n@a                  % Index 1.Element einer Gruppe
  234. \newcount\n@i                  % Laufindex in der Gruppe
  235. \newcount\n@e                  % Index letztes Element einer Gruppe
  236. \newcount\N                    % Kardinalitaet der Nachbarschaft
  237. \newcount\m@i                  % Listenindex
  238. \newcount\m@ii                 % Listenindex
  239. \newcount\L@                   % Laenge des Balkens in 0.5pt
  240. \newcount\l@                   % zur Zusammensetzung des Balkens
  241. \newcount\m@a\newcount\m@e     % Anfangs- und Endindex der Elementliste
  242.                                % die durch einen Balken verbunden werden
  243.                                % sollen
  244. \newcount\P@i                  %lok. pitch, der in endpoint benutzt wird
  245. \newcount\P@a                  %Anfangspitch
  246. \newcount\P@e                  %Endpitch
  247. \newcount\beamrow              %Korrektur von vpos bei mehrfachverb.
  248. \newcount\S                    % Steigung
  249. \newcount\S@                   % Absolutbetrag der Steigung
  250. \newcount\slurwidth            % Ganzzahlige Breite eines Bogens in
  251.                                % Einheiten von \nhw
  252. \newcount\V@int                % Ganzzahlige Hoehe  eines Bogens in
  253.                                % Einheiten von 1/2\nhh
  254. \newcount\CODE                 % Charcode Steigung von Balken
  255. \newcount\flaga                % Werte 0,1,2  Bogenanfang
  256. \newcount\flagb                % Werte 0,1,2  Bogenende
  257. \newcount\flagc                % Balkensteigung = 0           ja/nein
  258. %6.Dimensionsregister
  259. %Konstanten
  260. \newdimen\linethickness        % Dicke einer Notenlinie
  261. \newdimen\nhh                  % Linienabstand, noteheadheight
  262. \newdimen\nhw                  % Notenkopfbreite, noteheadwidth
  263. \newdimen\seminhh              % halber Linienabstand   = 1/2\nhh
  264. \newdimen\seminhw              % halbe  Notenkopfbreite = 1/2\nhw
  265. \newdimen\twonhh               % = 2\nhh
  266. \newdimen\I@@                  % = 100pt
  267. \newdimen\stemwidth            % = 2\linethickness
  268. \newdimen\beamthickness        % = 0.6 \nhh
  269. \newdimen\staffheight          % = 4\nhh + \linehight
  270. \newdimen\textline             % = \staffheigth, Abstand Schriftlinie --
  271.                                % Grundlinie bei Textunterlage
  272. \newdimen\linekern             % \nhh - \linethickness,kern zw.den Zeilen
  273. \newdimen\Linekern             % \nhh -2\linethickness,kern zw.den Zeilen
  274.                                % bei Hilfslinien
  275. \newdimen\dotwd                % Breite eines Verlaengerungspunktes
  276. \newdimen\smkern               % kleiner Kern zur Korrektur vor und
  277.                                % nach Notenkoepfen (Hilfslinien)
  278. %Parameter
  279. \newdimen\yshift               % dimen!, um die die Vorzeichen verschoben
  280.                                % werden in Y-Richtung!
  281. \newdimen\nyshift              % dimen!, um die die NOTENbox   verschoben
  282.                                % wird in Y-Richtung!
  283. \newdimen\lyshift              % dimen!, um die die LEGERbox   verschoben
  284.                                % wird in Y-Richtung!
  285. \newdimen\akzent@pos           %vertikale Positionierung eines
  286.                                %Artikulationszeichens
  287.  %Nachbarschaften: Balken- und Bogengruppen
  288. \newdimen\s@a                  %Anfangstemlength
  289. \newdimen\s@e                  %Endstemlength
  290. \newdimen\minsl                %untere Grenze f. Stemverkuerzung
  291. \newdimen\R@i                  % rel. Hoehe des Notenkopfes pitch*seminhh
  292. \newdimen\E@a                  % Endpunkt des Notenhalses Anfangsnote
  293. %                                pitch*seminhh +(-)stemlength
  294. \newdimen\R@a                  % rel. Hoehe des Notenkopfes pitch*seminhh
  295. \newdimen\E@e                  % Endpunkt des Notenhalses Endnote
  296. %                                pitch*seminhh +(-)stemlength
  297. \newdimen\R@e                   % relative Hoehe des Notenkopfes
  298. \newdimen\s@i                   %lok. stemlength, in endpoint
  299. \newdimen\Abs                   %Absoluter Abstand zwischen 2 Endpunkten
  300. \newdimen\corr                  %Korrekturwert fuer 2. Stem
  301. \newdimen\sl@c                  %4.Korrekturwert fuer Stemlaengen
  302. \newdimen\EP@                  %Endpunkt des ersten Stems einer Notengr.
  303. \newdimen\EP@i                 %Endpunkt des Stems innerhalb einer Gruppe
  304. \newdimen\E@l                  % Unterer Startpunkt fuer Bogenansatz
  305. \newdimen\E@u                  % oberer Startpunkt fuer Bogenansatz
  306. \newdimen\H@e                  % horizontaler Abstand zwischen zwei Noten
  307. \newdimen\H@a                  % Korrekturwert zur Berechnung von H@e
  308. \newdimen\H@a@cor              % Korrekturwert zur Berechnung der Laenge
  309.                                % Balkens oder Bogens (bzgl. H@list)
  310. \newdimen\H@e@cor              % Korrekturwert zur Berechnung der Laenge
  311.                                % Balkens oder Bogens (bzgl. H@list)
  312. \newdimen\limit                %\limit = 0.45\H@e=Grenzwert
  313. \newdimen\V@                   %vertikaler Abstand zwischen zwei Noten
  314. \newdimen\gradfactor           %= 0.005\S\p@
  315. \newdimen\SHIFT
  316. \newdimen\slurcor              % horizontal Kern fuer Bogenpositionierung
  317. \newdimen\H@m@a                % Horizontaler Abschnitt von m@a
  318. \newdimen\L@a                  % Balkenlaenge
  319. \newdimen\V@a                  % vertikale Position des Balkens
  320. \newdimen\stemlength           % Laenge des Notenhalses
  321. \newdimen\linelength           % Laenge der Notenlinien
  322. %Textunterlage
  323. \newdimen\overtext             % fuer Textueberlage
  324. \newdimen\undertext            % fuer Textunterlage
  325. %6. Skipregister
  326. % Ausschlussparamter
  327. \newskip \NOTEskip             % Glue nach ganzer Note
  328. \newskip \Noteskip             % Glue nach halber Note
  329. \newskip \noteskip             % Glue nach 1/4    Note
  330. \newskip \notEskip             % Glue nach 1/8    Note
  331. \newskip \noTEskip             % Glue nach 1/16   Note
  332. \newskip \nOTEskip             % Glue nach 1/32   Note
  333. \newskip \nOteskip             % Glue nach 1/64   Note
  334. \newskip \nOtEskip             % Glue nach 1/128  Note
  335. \newskip \ruleskip             % Glue nach Rules
  336. \newdimen\hunkskip             % Glue fuer Hunks
  337. \newskip\oldskip               % aktueller \spaceskip vor Nachbarschaft
  338. %       **************************************************              %
  339. %       *    Registerinitialisierungen                   *              %
  340. %       **************************************************              %
  341. \beamfont \beamthickness = 1ex
  342. \music    \nhh           = 1ex  \nhw     = 1em
  343.           \seminhh  = 0.5\nhh   \seminhw = 0.5\nhw
  344.           \twonhh   = 2 \nhh
  345. \I@@     = 100 pt
  346. \linethickness = 0.15pt
  347. \stemwidth     = 2\linethickness
  348. \staffheight   = 4 \nhh \advance\staffheight by \linethickness
  349. \linekern      =   \nhh \advance\linekern    by-\linethickness
  350. \Linekern      =   \nhh \advance\Linekern    by-2\linethickness
  351. \overtext  =\staffheight \advance\overtext by\nhh
  352. \def\u@text{\relax}\def\l@text{\relax}
  353. \textline =\staffheight
  354. \undertext =\textline
  355. \tieconst = 4 \phraseconst = 2
  356. \def\up@{up}\def\down@{down}
  357. %       **************************************************              %
  358. %       *    Punktierung                                 *              %
  359. %       **************************************************              %
  360. %1.Ausschluss-schemata
  361. \let\sk=\spaceskip
  362. %\ruleskip  = \seminhw plus \seminhw minus 0.5\seminhw
  363. \ruleskip  = \nhw plus \seminhw minus \seminhw
  364. \smkern = 0.2\nhw \relax
  365. \def\hsmall{%hader
  366. \Noteskip 3\nhw plus 2\seminhw minus 2\seminhw
  367. \NOTEskip = \Noteskip
  368. \noteskip 2\nhw plus 1.5\seminhw  minus 1.5\seminhw
  369. \notEskip 1\nhw plus \seminhw  minus \seminhw
  370. \noTEskip \z@ plus 0.5\seminhw  minus \z@
  371. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  372. \hunkskip \z@\relax}
  373. \def\small{%
  374. \Noteskip 3.5\nhw plus 1.8\seminhw minus 1.8\seminhw
  375. \NOTEskip = \Noteskip
  376. \noteskip 2.5\nhw plus 1.4\seminhw  minus 1.4\seminhw
  377. \notEskip 1.5\nhw plus \seminhw  minus \seminhw
  378. \noTEskip \seminhw plus 0.6\seminhw  minus 0.6\seminhw
  379. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  380. \hunkskip \z@ \relax}
  381. \def\universal{%
  382. \Noteskip 4\nhw plus 1.6\nhw minus 1.6\nhw
  383. \NOTEskip = \Noteskip
  384. \noteskip 3\nhw plus 1.3\nhw  minus 1.3\nhw
  385. \notEskip 2\nhw plus \nhw  minus \nhw
  386. \noTEskip \nhw plus 0.6\nhw  minus 0.6\nhw
  387. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  388. \hunkskip \z@ \relax}
  389. \def\wide{%
  390. \Noteskip 4\nhw plus 1.42\nhw minus 1.42\nhw
  391. \NOTEskip = \Noteskip
  392. \noteskip 3.5\nhw plus 1.28\nhw  minus 1.28\nhw
  393. \notEskip 2.5\nhw plus \nhw  minus \nhw
  394. \noTEskip 1.5\nhw plus 0.9\nhw  minus 0.9\nhw
  395. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  396. \hunkskip \z@ \relax}
  397. \def\loose{%
  398. \Noteskip 5\nhw plus 1.5\nhw minus 1.5\nhw
  399. \NOTEskip = \Noteskip
  400. \noteskip 4\nhw plus 1.25\nhw  minus 1.25\nhw
  401. \notEskip 3\nhw plus \nhw  minus \nhw
  402. \noTEskip 2\nhw plus 0.75\nhw  minus 0.75\nhw
  403. \nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip
  404. \hunkskip \z@\relax}
  405. %1.Glue-Makros
  406. \def\hunkglue{\hunkskip=\sk\relax\advance \hunkskip by -\wd\hunkbox
  407.   \ifdim\hunkskip>\z@ \hunkskip=\wd\hunkbox\relax
  408. % \else \hunkskip=\sk \advance\hunkskip-\seminhw\relax \fi}%schm 10.11.87
  409.   \else \hunkskip=\sk                           \relax \fi}%schm 10.11.87
  410. %Glue vor einer Rule (Taktstrich etc.)
  411. \def\gluebrule{\hunkglue\nobreak\ \hskip-\hunkskip\box\hunkbox%
  412.  \u@text\l@text\nobreak}
  413. %Glue vor einer Taktangabe
  414. \def\gluebmeter{\hunkglue\kern\seminhw\nobreak\box\hunkbox%
  415.  \u@text\l@text\nobreak}
  416. %Glue nach einer Rule (Taktstrich etc.)
  417. \def\gluearule{\-\global\sk\ruleskip}
  418. \def\set@rulesk{\global\sk\ruleskip}
  419. %Glue vor einer Note
  420. \def\sethunkglue{\hunkglue\nobreak\ \hskip-\hunkskip}
  421. %Umbruchm"oglichkeit im Taktinnern
  422. \def\+{\ \-\global\sk=\z@skip}
  423. %       **************************************************              %
  424. %       *    Hilfsfunktionen                             *              %
  425. %       **************************************************              %
  426. %entspricht dem von Knuth angegebenen Makro der \loop-Schleife, jedoch
  427. %wird die Schleife bei \else wiederholt.
  428. \def\looop#1\leave{\def\boddy{#1}\iiterate}
  429. \def\iiterate{\boddy \let\nexxt\relax \else\let\nexxt\iiterate\fi \nexxt}
  430. \let\leave=\fi % this makes \looop...\if...\leave skippable
  431. % entspricht |#1 - #2|
  432. \def\distance#1#2{\relax\ifdim#1>#2\relax\Abs=#1\advance\Abs by-#2\relax
  433.                     \else\Abs=#2\advance\Abs by-#1\relax\fi}
  434. %Notensetzen, z.B. Ineinanderschieben von Hilfslinienbox und Notenbox
  435. %Breite des Boxinhalts wird ignoriert
  436. \def\cbox#1{\hbox to \z@{\hss#1\hss}} % zentriert den Inhalt der Box
  437. \def\hboxnhw#1#2{\hbox to \nhw{\hss\cbox{#1}\cbox{#2}\hss}}
  438.                                       %Box der Breite eines Notenkopfes
  439. \def\ignore#1{\hbox to \z@{\hss#1}}   % entspricht \llap in PLAIN
  440.                             %z.B. fuer Oktavierung des Versetzungszeichen
  441. %Rules fuer Phrasierungen
  442. \def\r@lef@ill#1{\leaders\hrule height \z@ depth #1 \relax\hfill}
  443. \def\r@lef@ll#1{\leaders\hrule height #1 depth \z@ \relax\hfill}
  444. %zum Setzen der Phrasierungsboegen
  445. \def\vt@@#1{\vtop to\z@{\offinterlineskip\null\hbox{#1}\vss}}
  446. \def\vb@@#1{\vbox to\z@{\offinterlineskip\vss\hbox{#1}\null}}
  447. % Korrekturfunktionen fuer Berechnung der Halslaenge
  448. \def\corra#1{\relax \ifdim\Abs>\seminhh
  449.                       \ifdim#1>\minsl \advance #1 by -\seminhh\fi
  450.                     \fi}
  451. %1. Verkuerzung, des hoeherliegenden(stemup) bzw. tieferliegenden
  452. %(stemdown) Notenhalses um \seminhh falls moeglich(Abstand>\seminhh)
  453. \def\corrb#1{\advance #1 by \corr}
  454. %2. Verlaengerung des anderen Notenhalses um Hoechstabstand zu
  455. %erreichen
  456. \def\corrc#1{\advance #1 by \seminhh}
  457. %3. p1~=p2 Abstand =0 : Verkuerzung des Notenhalses der tiefer (hoeher)
  458. %gelegenen Note um \seminhh
  459. %
  460. %Funktionen die die vertikalen Abstaende
  461. %der Bogenendpunkte von der Grundlinie berechnen
  462. %dabei ist E@u der Ansatz des oberhalb verlaufenden Bogens
  463. %und       E@l der Ansatz des unterhalb verlaufenden Bogens
  464. %Punkte fuer Akkorde (oberhalb/unterhalb)
  465. \def\chordupperstartpoints{%
  466.   \global\E@u\maxpitch\seminhh \global\advance\E@u\nhh
  467.   \ifdim\E@u<\z@ \global\advance \E@u-\I@@
  468.            \else \global\advance \E@u \I@@ \fi}
  469. \def\chordlowerstartpoints{%
  470.   \global\E@l\minpitch\seminhh \global\advance\E@l-\nhh
  471.   \ifdim\E@l<\z@ \global\advance \E@l-\I@@
  472.            \else \global\advance \E@l \I@@ \fi}
  473. \def\whatisnewstartpoint{%
  474.     \ifdim\E@a=\z@ \global\E@a = 1sp \fi
  475.     \ifstemup\relax
  476.           \expandafter\exchange\the\E@a\in\uslurlist\at \n@a
  477.         \else \relax
  478.           \expandafter\exchange\the\E@a\in\lslurlist\at \n@a
  479.         \fi
  480.      }
  481. %neue Ansatzwerte E@l E@u berechnen und an \n@i-te Stelle  der
  482. %    \lslurlist bzw. \uslurlist setzen (NACH Balkenberechnung)
  483. \def\whatarenewstartpoints{%
  484.     \ifdim\EP@i=\z@ \global\EP@i = 1sp \fi
  485.     \ifstemup\relax
  486.           \expandafter\exchange\the\EP@i\in\uslurlist\at \n@i
  487.         \else \relax
  488.           \expandafter\exchange\the\EP@i\in\lslurlist\at \n@i
  489.         \fi
  490.     }
  491. % belegt #2 mit dem Endpunkt des Notenhalses des #1-ten Elementes der
  492. % Notengruppe
  493. \def\getendpoint#1#2{\relax\hc@i=#1%
  494.     \lokalassign\hc@i\of\H@list\to\hd@i
  495.     \lokalassign\hc@i\of\H@corlist\to\hd@ii
  496.     \select\hc@i\of\dir@list\to\dir@i
  497.     \ifx\dir@i\down@ \advance\hd@ii\nhw \fi
  498.     \advance\hd@i by-\hd@ii
  499.     \advance\hd@i by-\H@a  \multiply\hd@i by\S \hd@i=0.01 \hd@i
  500.     \advance\hd@i by\EP@        %EP@ = Endpunkt @ n@a
  501.     \global#2=\hd@i}
  502. %
  503. % Weist \S die im Balken- / Bogenfont vorhandene  Steigung zu
  504. \def\addC{\global\advance\CODE by }
  505. \def\assignS{%
  506.     \ifnum\S<0 \S@=-\S \else \S@=\S \fi
  507.     \ifnum\S@< 1 \S@=0          \else
  508.     \ifnum\S@< 8 \S@=5   \else
  509.     \ifnum\S@<12 \S@=10  \else
  510.     \ifnum\S@<17 \S@=15  \else
  511.     \ifnum\S@<22 \S@=20  \else
  512.     \ifnum\S@<27 \S@=25  \else
  513.     \ifnum\S@<32 \S@=30  \else
  514.     \ifnum\S@<40 \S@=35  \else \S@=45\fi\fi\fi\fi\fi\fi\fi\fi
  515.     \ifnum\S<0\global\S=-\S@ \else\global\S=\S@\fi}
  516. % Berechnet den Code der Steigung  im Bogenfont
  517. \def\assignCODE{%
  518.     \ifnum\S< 0 \global\CODE = 64 \S@ = -\S \else \S@ = \S
  519.                                              \global\CODE = 0 \fi
  520.     \ifnum\S@< 6  \addC 0 \else
  521.     \ifnum\S@<11  \addC 8 \else
  522.     \ifnum\S@<16  \addC16 \else
  523.     \ifnum\S@<21  \addC24 \else
  524.     \ifnum\S@<26  \addC32 \else
  525.     \ifnum\S@<31  \addC40 \else
  526.     \ifnum\S@<36  \addC48 \else
  527.     \ifnum\S@<46  \addC56 \fi\fi\fi\fi\fi\fi\fi\fi}
  528. %Im Moment benutzte Steigungen
  529. %5 10 15 20 25 30 35 45
  530. \def\assignuslurchar{\hc@i=\slurwidth
  531.   \ifnum\V@int= 0 %\V@=\z@
  532.   \ifnum\hc@i>1 \advance\hc@i-2 \else \advance\hc@i-1 \fi
  533.      \edef\slurchar{\the\hc@i}%
  534.   \else
  535.     \ifnum\slurwidth<4 \multiply\hc@i\slurwidth
  536.       \advance\hc@i-\slurwidth\advance\hc@i\V@int\advance\hc@i-1
  537.       \multiply\hc@i8\edef\slurchar{\the\hc@i}%
  538.     \else\advance\hc@i-2 \hc@ii=\V@int\advance\hc@ii-1
  539.      \ifodd\hc@i\divide\hc@i2
  540.      \edef\slurchar{\noexpand'1\the\hc@ii\the\hc@i}%
  541.      \else \divide\hc@i 2 \edef\slurchar{\noexpand'\the\hc@ii\the\hc@i}\fi
  542.     \fi
  543.   \fi\slurtoks=\expandafter{\slurchar}}
  544. \def\assignlslurchar{\hc@i=\slurwidth
  545.   \ifnum\V@int= 0 %\V=\z@
  546.     \ifnum\hc@i>1\advance\hc@i14 \else\advance\hc@i15 \fi
  547.     \edef\slurchar{\the\hc@i}%
  548.   \else
  549.     \ifnum\slurwidth<4 \multiply\hc@i by \slurwidth
  550.       \advance\hc@i-\slurwidth\advance\hc@i\V@int\advance\hc@i-1
  551.       \multiply\hc@i8\edef\slurchar{\noexpand\the\hc@i}%
  552.     \else\advance\hc@i-2\hc@ii=\V@int\advance\hc@ii-1
  553.      \ifodd\hc@i\divide\hc@i2
  554.      \edef\slurchar{\noexpand'1\the\hc@ii\the\hc@i}%
  555.      \else \divide\hc@i2 \edef\slurchar{\noexpand'\the\hc@ii\the\hc@i}\fi
  556.     \fi
  557.   \fi\slurtoks=\expandafter{\slurchar}}
  558. %       **************************************************              %
  559. %       *  Macros zur  Listenerzeugung und Verarbeitung  *              %
  560. %       **************************************************              %
  561. %\newtoks\ta\newtoks\tb
  562. %Haengt an Liste #2 ein neues Element mit Inhalt #1 an
  563. \long\def\rightappend#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}%
  564.   \edef#2{\the\tb\the\ta}}
  565. %Weist dem Register (Counter oder Dimension oder Skip ) den Wert des
  566. %#1-ten Elementes der Liste #2 zu (lokal bzw.  global)
  567. \def\assign#1\of#2\to#3{\m@i=#1\relax
  568.   \long\def\\##1{\advance\m@i-1\relax             % globale Zuweisung
  569.   \ifnum\m@i=0\relax\global#3=##1\fi}#2\relax}
  570. %
  571. \def\lokalassign#1\of#2\to#3{\m@i=#1\relax     % lokale Zuweisung
  572.  \long\def\\##1{\advance\m@i-1\relax\ifnum\m@i=0\relax#3=##1\fi}#2\relax}
  573. %
  574. %Definiert die Kontrollsequenz #3 als den Inhalt des
  575. %#1-ten Elementes der Liste #2 zu (lokal).
  576. \def\select#1\of#2\to#3{\m@i=#1\relax     % lokale Zuweisung
  577.  \long\def\\##1{\advance\m@i-1\relax\ifnum\m@i=0\relax\def#3{##1}\relax
  578.  \fi}#2\relax}
  579. %
  580. %setzt #1=Anzahl der Elemente einer Liste
  581. \def\cardinality#1\to#2{#2=0\long\def\\##1{\advance#2 by 1 }#1}
  582. %
  583. %Tauscht in Liste #2 den Inhalt des #3-ten Elementes gegen #1 aus.
  584. \def\exchange#1\in#2\at#3{\m@i=#3\long\def\\##1{\advance\m@i-1
  585.   \ifnum\m@i=0 \rightappend{#1}\to\helplist
  586.         \else\rightappend##1\to\helplist\fi}#2%
  587.   \let\hhelplist=\helplist\global\let#2=\hhelplist\let\helplist=\empty
  588.   }
  589. %abhaengig von der Notenkonstellation Abfrage auf  \S=0
  590. \def\gradz@\in#1\with#2#3\from#4\to#5{\m@i=#4\m@ii=#5\relax
  591.   \advance\m@i 1 \advance\m@ii -1
  592.   \long\def\\##1{\advance\m@i-1\advance\m@ii-1
  593.   \ifnum\m@i<1 \ifnum\m@ii>-1 \hc@i=##1\relax
  594.   \ifnum\hc@i#2#3 \relax \else
  595.    \global\flagc=0 \ifnum\hc@i#2 4 \relax \else \global\minsl=\twonhh\fi
  596.   \fi\fi\fi}#1}
  597. %
  598. %addiert den Wert von \sl@c zum Wert in Liste #1 von Element #2 bis #3
  599. \def\addslc\in#1\from#2\to#3{\m@i=#2\m@ii=#3\long\def\\##1{\advance\m@i-1
  600.   \advance\m@ii-1
  601.   \ifnum\m@i<1 \ifnum\m@ii>-1 \hd@i=##1 \advance\hd@i\sl@c
  602.   \expandafter\rightappend\the\hd@i\to\helplist\else
  603.   \rightappend##1\to\helplist\fi\else\rightappend##1\to\helplist\fi}#1%
  604.   \let\hhelplist=\helplist\global\let#1=\hhelplist\let\helplist=\empty}
  605. %
  606. %wechselt die Richtungen der Notenh"alse in der \dir@list vom
  607. %#2-ten  bis zum #3-ten Element gegen #1 aus.
  608. \def\putdir#1\from#2\to#3{\m@i=#2\m@ii=#3\def\helplist{}%
  609. \long\def\\##1{\advance\m@i-1
  610.   \advance\m@ii-1
  611.   \ifnum\m@i<1 \ifnum\m@ii>-1
  612.   \expandafter\rightappend#1\to\helplist\else
  613.   \rightappend##1\to\helplist\fi\else\rightappend##1\to\helplist\fi}%
  614.   \dir@list%
  615.   \let\hhelplist=\helplist\global\let\dir@list
  616.     =\hhelplist\let\helplist=\empty}
  617. %
  618. %Ersetzt den Inhalt des #4-ten Elementes der Liste #3 durch
  619. %#1 Inhalt #2
  620. \def\additem#1#2\in#3\at#4{\m@i=#4\long\def\\##1{\advance\m@i-1 \relax
  621.   \ifnum\m@i=0\ht@i{##1}\edef\h@@@{#1\the\ht@i#2}\expandafter
  622.   \rightappend\h@@@\to\helplist\else\rightappend##1\to\helplist\fi}#3%
  623.   \let\hhelplist=\helplist\global\let#3=\hhelplist\let\helplist=\empty
  624.   }
  625. %       **************************************************              %
  626. %       *    Notenlinien und Hilfslinien                 *              %
  627. %       **************************************************              %
  628. \def\nobaselines{\baselineskip=\z@ \lineskip=\z@ \lineskiplimit=\z@}
  629. %\baselinesa und \baselinesb = zwei Verschiedene M"oglichkeiten f"ur
  630. % die Interline Glue Wahl.
  631. \def\baselinesa{%
  632.   \baselineskip=2\staffheight plus \staffheight minus  .5\staffheight
  633.   \lineskip=0.5\staffheight plus \staffheight minus  .5\staffheight
  634.   \lineskiplimit=0.5\staffheight}
  635. \def\baselinesb{%
  636.   \baselineskip=3\staffheight plus \staffheight minus  .5\staffheight
  637.   \lineskip=0.5\staffheight plus \staffheight minus  .5\staffheight
  638.   \lineskiplimit=0.5\staffheight}
  639. %Notenlinie
  640. \def\hr{\hrule height\linethickness depth \z@ width \linelength}
  641. %Notenlinie und Zwischenraum
  642. \def\hrv{\hr\kern\linekern}
  643. %Hilfslinie
  644. \def\HRULE{\hrule height\linethickness depth\linethickness width \twonhh}
  645. %Hilfslinie und Zwischenraum fuer Hilfslinien unterhalb des Systems
  646. \def\KHR{\kern\Linekern\HRULE}
  647. %Hilfslinie und Zwischenraum fuer Hilfslinien oberhalb des Systems
  648. \def\HRK{\HRULE\kern\Linekern}
  649. %Liniensystem
  650. \def\lines{\linelength=\hsize
  651.   \hbox to \z@{\vbox{\hrv\hrv\hrv\hrv\hr}\hss}}
  652. %Liniensystem fuer erste Zeile unter Ber"ucksichtigung des \parindent
  653. \def\firstlines{\hbox to \z@{\linelength=\hsize\advance\linelength by
  654.   -\parindent \vbox{\hrv\hrv\hrv\hrv\hr}\hss}}
  655. %
  656. %macros, die die Hilfslinienbox herstellen zur zugeho"rigen Note
  657. %\nn = Anzahl der ben"otigten Hilfslinien
  658. %formel: \pitch<0 \nn=-\pitch/2, \pitch>8 \nn=(\pitch-8)/2, \nn=0 sonst
  659. \def\legerlines{\leger@cal\ifnum\nn=0 \global\setbox\legerbox\null%
  660.   \else\relax\ifnum\pitch<0 \global\setbox\legerbox=\vtop{\leger@line}%
  661.   \else\global\setbox\legerbox=\vbox{\leger@line}\fi\fi}
  662. \def\leger@line{\begingroup \loop \ifnum \nn>0 \aftergroup \HR
  663.   \advance\nn-1 \repeat \endgroup}
  664. \def\leger@cal{\ifnum\pitch<-1 \nn =-\pitch \lyshift =\z@ \let\HR=\KHR
  665.   \else\relax\ifnum\pitch<10 \nn = 0      \lyshift =\z@
  666.   \else\nn=\pitch\advance\nn-8 \lyshift=4\nhh%\staffheight-\linethickness
  667.   \let\HR=\HRK
  668.   \fi\fi \divide \nn by 2 }
  669. %Hilfslinien bei Akkorden
  670. \def\chordlegerlines{%
  671.   \ifleft
  672.   \global\setbox\leftbox=
  673.   \hboxnhw{$\raise\lyshift\box\legerbox$}{\box\leftbox}%
  674.   \else
  675.   \global\setbox\rightbox=
  676.   \hboxnhw{$\raise\lyshift\box\legerbox$}{\box\rightbox}%
  677.   \fi}
  678. %       **************************************************              %
  679. %       *    Taktstriche u. a".                          *              %
  680. %       **************************************************              %
  681. %Striche
  682. %Atemzeichen
  683. \def\caesurasign{\vrule height4.5\nhh depth-3.5\nhh width3\linethickness}
  684. %schmaler Strich: Taktstrich
  685. \def\thinvrule{\vrule height\staffheight depth \z@ width2 \linethickness}
  686. %dicker Strich:
  687. \def\thickvrule{\vrule height\staffheight depth \z@ width 0.5\nhh}
  688. %Doppelpunkt fuer Wiederholungszeichen:
  689. \def\doppelpunkt{%
  690.   \hbox{\vrule height 2.6\nhh depth-2.4\nhh width 0.2\nhh\kern-0.2\nhh
  691.   \vrule height 1.6\nhh depth-1.4\nhh width 0.2\nhh}}
  692. %zu Taktstrichen zusammengesetzte Striche:
  693. \def\doppelstrich{\thinvrule\kern.25\nhw\thinvrule}
  694. \def\schlussstrich{\thinvrule\kern\seminhw\thickvrule}
  695. %wiederholungszeichen mit Doppelpunkt links
  696. \def\repstrich{\doppelpunkt\kern\seminhw
  697.   \thinvrule\kern\seminhw\thickvrule}
  698. %wiederholungszeichen mit Doppelpunkt rechts
  699. \def\revrepstrich{\thickvrule\kern\seminhw\thinvrule\kern\seminhw
  700.   \doppelpunkt}
  701. %
  702. %taktstriche mit Glue
  703. \def\|{\gluebrule\thinvrule\gluearule}
  704. \def\={\gluebrule\schlussstrich\gluearule\null}
  705. \def\doublebarline{\gluebrule\doppelstrich\gluearule\null}
  706. \def\rightrepeat{\gluebrule\repstrich\gluearule\null}
  707. \def\leftrepeat{\gluebrule\thinvrule\-\revrepstrich\nobreak}
  708. \def\leftrightrepeat{\gluebrule\repstrich\-%
  709.   \kern-\seminhw\revrepstrich\global\sk\ruleskip}
  710. %
  711. % Makro fuer Orientierungszeichen
  712. \def\boxed#1{\setbox0=\hbox{$\displaystyle{#1}$}\hbox{\lower.4pt\hbox{\lower
  713.    3pt\hbox{\lower 1\dp0\hbox{\vbox{\hrule height .4pt \hbox{\vrule width
  714.    .4pt \hskip 3pt\vbox{\vskip 3pt\box0\vskip3pt}\hskip 3pt \vrule width
  715.       .4pt}\hrule height .4pt}}}}}}
  716. %Kaesten
  717. \def\1#1\2#2\*{\def\f@rsttime{#1*}\def\s@condtime{#2*}%
  718.   \expandafter\evalfirst\f@rsttime!!!%
  719.   \ifx\interim\empty \nobreak\box@@@\else
  720.     \looop\expandafter\evalinterim\interim!!!%
  721.        \ifx\interim\empty\relax\nobreak\box@@@\leave\fi
  722.   \expandafter\evalsecond\s@condtime!!!%
  723.   \ifx\interim\empty \relax\else
  724.     \looop\expandafter\evalinterim\interim!!!%
  725.        \ifx\interim\empty\relax\leave\fi
  726. }
  727. \def\evalfirst#1*#2!!!{\def\interim{#2}\penalty-1000\box@{#1}}
  728. \def\evalinterim#1*#2!!!{\def\interim{#2}\penalty-1000\box@@{#1}}
  729. \def\evalsecond#1*#2!!!{\def\interim{#2}\penalty-1000\box@@@@{#1}}
  730. \def\box@#1{\let\setlines\relax\gluebrule
  731.   \vbox{\halign{##\cr\repbox{1.}\r@lef@ll{\linethickness}\cr
  732.                 \noalign{\nointerlineskip}%
  733.                 \repstrut\thinvrule\gluearule#1\cr}}%
  734.   \let\setlines=\s@tlines}
  735. \def\box@@#1{\let\setlines\relax
  736. \vbox{\halign{##\cr\r@lef@ll{\linethickness}\cr
  737.                 \noalign{\nointerlineskip}\repstrut#1\cr}}%
  738.   \let\setlines=\s@tlines}
  739. \def\box@@@{\vbox{\halign{##\cr\r@lef@ll{\linethickness}\repbox{}\cr
  740.                 \noalign{\nointerlineskip}%
  741.           \repstrut\setgluebrule\doppelpunkt\kern\seminhw\thinvrule\cr}}}
  742. \def\box@@@@#1{\let\setlines\relax\vbox{\tabskip\seminhw
  743.                \halign{##\tabskip\z@\cr
  744.                 \repbox{2.}\r@lef@ll{\linethickness}\cr
  745.                 \noalign{\nointerlineskip}%
  746.                 \repstrut\thickvrule\setgluearule#1\cr}}%
  747.   \let\setlines=\s@tlines}
  748. \def\repbox#1{\vtop to\z@{\null\nointerlineskip
  749.   \hbox to \z@{\vrule height10pt depth -\nhh width\stemwidth{#1}\hss
  750.   }\vss}}
  751. \def\repstrut{\vrule width \z@ height 7\nhh depth\z@}
  752. \def\overstrut{\vrule width \z@ height 6\nhh depth\z@}
  753. %\let\overstrut=\repstrut
  754. %
  755. %       **************************************************              %
  756. %       *    SETZEN der VERSETZUNGSZEICHEN               *              %
  757. %       **************************************************              %
  758. %Setzen der Versetzungszeichen vor Noten:
  759. \def\setvorz#1{\relax\setbox \hunkbox=\hbox{\unhbox\hunkbox%
  760.   \global\advance\oldpitch-7 \yshift=\pitch\seminhh
  761.   \ifnum\oldpitch=\pitch$\raise\yshift\hbox to \z@{\hss\music#1}$\else
  762.   $\raise\yshift\hbox{\music#1}$\fi}\global\oldpitch=\pitch}
  763. %Setzen der Versetzungszeichen in der Vorzeichnung:
  764. \def\setsign#1#2{\hc@i=#1  \advance\hc@i by \clefcount
  765.   \ifnum\hc@i<-1 \advance\hc@i7 \else\ifnum\hc@i>9 \advance\hc@i-7 \fi\fi
  766.   $\raise\hc@i\seminhh\hbox{\music#2}$}
  767. %Atemzeichen
  768. \def\caesura{\setbox\hunkbox=\hbox{\unhbox\hunkbox%
  769.   \kern\p@\caesurasign\kern\nhh}}
  770. %       **************************************************              %
  771. %       *    Versetzungszeichen - Eingabemacros          *              %
  772. %       **************************************************              %
  773. %\x=\sharp Kreuz
  774. %\xx= Doppel-Kreuz
  775. %\n=\natural Aufloesungszeichen
  776. %\b=\flat
  777. %\bb=Doppel-Be
  778. \def\x#1{\global\pitch=#1\relax\setvorz{\msharp}}
  779. \def\xx#1{\global\pitch=#1\relax\setvorz{\mdoublesharp}}
  780. \def\n#1{\global\pitch=#1\relax\setvorz{\mnatural}}
  781. \def\b#1{\global\pitch=#1\relax\setvorz{\mflat}}
  782. \def\bb#1{\global\pitch=#1\relax\setvorz{\mdoubleflat}}
  783. %Versetzungszeichen in der Vorzeichnung
  784. \def\b@#1{\setsign{#1}{\mflat}}
  785. \def\x@#1{\setsign{#1}{\msharp}}
  786. \def\n@#1{\setsign{#1}{\mnatural}}
  787. %       **************************************************              %
  788. %       *    NOTEN - Eingabemacros                       *              %
  789. %       **************************************************              %
  790. %ganze
  791. \def\g#1{\global\pitch=#1\setnotes{NOTE}}
  792. %halbe
  793. \def\h#1{\global\pitch=#1\setnotes{Note}}
  794. %viertel
  795. \def\v#1{\global\pitch=#1\setnotes{note}}
  796. %achtel
  797. \def\a#1{\global\pitch=#1\setnotes{notE}}
  798. %sechzehntel
  799. \def\s#1{\global\pitch=#1\setnotes{noTE}}
  800. %zweiunddreissigstel
  801. \def\z#1{\global\pitch=#1\setnotes{nOTE}}
  802. %vierundsechzigstel
  803. \def\d#1{\global\pitch=#1\setnotes{nOte}}
  804. %hundertachtundzwanzigstel
  805. \def\o#1{\global\pitch=#1\setnotes{nOtE}}
  806. %       **************************************************              %
  807. %       *    PAUSEN  - Eingabemacros                     *              %
  808. %       **************************************************              %
  809. %Pausen erhalten \pitch = 5 zum Setzen der Wertpunkte im 3. Zwischenraum
  810. \def\sethunks{\sethunkglue\box\hunkbox\u@text\l@text}
  811. %ganze
  812. \def\pg{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
  813.   \sethunks\PAUSE\global\pitch=5\global\nyshift=\pitch\seminhh
  814.   \nobreak\global\sk=\NOTEskip}
  815. %zwei Pausentakte
  816. \def\dpd{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
  817.   \sethunks{\music
  818.   \doublerest}\global\pitch=5\global\nyshift=\pitch\seminhh
  819.   \nobreak\global\sk=\NOTEskip}
  820. %drei Pausentakte
  821. \def\dpg{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
  822.   \sethunks{\music\doublerest}\hskip\nhh
  823.   \PAUSE\global\pitch=5\global\nyshift=\pitch\seminhh
  824.   \nobreak\global\sk=\NOTEskip}
  825. %vier Pausentakte
  826. \def\dpdd{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi
  827.   \sethunks{\music\ddoublerest}%
  828.   \global\pitch=5\global\nyshift=\pitch\seminhh
  829.   \nobreak\global\sk=\NOTEskip}
  830. %halbe
  831. \def\ph{\sethunks\Pause\global\pitch=5\global\nyshift=\pitch\seminhh
  832.   \nobreak\global\sk\Noteskip}
  833. %viertel
  834. \def\pv{\sethunks\pause\global\pitch=5\global\nyshift=\pitch\seminhh
  835.   \nobreak\global\sk\noteskip}
  836. %achtel
  837. \def\pa{\sethunks\pausE\global\pitch=5\global\nyshift=\pitch\seminhh
  838.   \nobreak\global\sk\notEskip}
  839. %sechzehntel
  840. \def\ps{\sethunks\pauSE\global\pitch=5\global\nyshift=\pitch\seminhh
  841.   \nobreak\global\sk\noTEskip}
  842. %zweiunddreissigstel
  843. \def\pz{\sethunks\paUSE\global\pitch=5\global\nyshift=\pitch\seminhh
  844.   \nobreak\global\sk\nOTEskip}
  845. %vierundsechzigstel
  846. \def\pd{\sethunks\pAuse\global\pitch=5\global\nyshift=\pitch\seminhh
  847.   \nobreak\global\sk\nOteskip}
  848. %hundertachtundzwanzigstel
  849. \def\po{\sethunks\pAusE\global\pitch=5\global\nyshift=\pitch\seminhh
  850.   \nobreak\global\sk\nOtEskip}
  851. %       **************************************************              %
  852. %       *    Wertpunkte                                  *              %
  853. %       **************************************************              %
  854. %\dotwd wird in einer Notengruppe benoetigt zur Berechnung der Laenge
  855. %des Balkens oder Bogens
  856. \setbox0=\hbox to\seminhw{\rm\kern\p@.\hss}\dotwd=\wd0
  857. %#1 gibt Anzahl der Punkte an.
  858. %- Eingabemacro
  859. \def\.#1{\relax\hc@i=#1\relax
  860.   \ifchord\chordjoindots\else\relax\joindots%
  861.                          \ifgroup\global\advance\H@a@cor by #1\dotwd \fi
  862.   \fi}
  863. \def\dotodd{\hbox to \seminhw{\rm\kern\p@.\hss}}%
  864. %Verschieben der Wertpunkte von Noten auf einer Notenlinie in
  865. %......den Zwischenraum oberhalb
  866. \def\dot@up{\hbox{$\raise0.3\nhh
  867.  \hbox to \seminhw{\rm\kern\p@.\hss}$}}
  868. %......den Zwischenraum unterhalb der Notenlinie
  869. \def\dot@down{\hbox{$\raise-0.5\nhh
  870.  \hbox to \seminhw{\rm\kern\p@.\hss}$}}
  871. %Normalfall: Verschiebung in den oberen Zwischenraum
  872. \def\doteven{\dot@up}
  873. %setzt #1 Punkte bei einzelnen Noten
  874. \def\joindots{\ifodd\pitch\let\punkt\dotodd\else\let\punkt\doteven\fi
  875.   $\raise\nyshift\hbox{%\kern\smkern
  876.   \begingroup \loop \ifnum \hc@i>0 \aftergroup \punkt
  877.   \advance\hc@i-1 \repeat \endgroup}$}
  878. %Wertpukte   bei Akkorden
  879. \def\chordjoindots{\global
  880.   \setbox\dotbox\hboxnhw{\box\dotbox}{\joindots\unskip}}
  881. %       **************************************************              %
  882. %       *    Akkorde - Eingabemacros                     *              %
  883. %       **************************************************              %
  884. \def\lchord#1\endchord{%Initialisierung
  885.   \global\maxpitch=-10000\global\minpitch=10000
  886.   \sethunkglue\begingroup\chordtrue\lefttrue\stemuptrue
  887.   \global\setbox\rightbox=\null\global\setbox\leftbox=\null%
  888.   \global\setbox\dotbox\null%
  889.   #1\endchord}
  890. %
  891. \def\rchord#1\endchord{%Initialisierung
  892.   \global\maxpitch=-10000\global\minpitch=10000
  893.   \sethunkglue\begingroup\chordtrue\leftfalse\stemupfalse
  894.   \global\setbox\rightbox=\null%
  895.   \global\setbox\leftbox=\null\global\setbox\dotbox\null%
  896.   #1\endchord}
  897. %       **************************************************              %
  898. %       *    Konstruktion der Noten und Pausen           *              %
  899. %       **************************************************              %
  900. %Bestimmung der zu setzenden Noten und Bestimmung der Halsrichtung
  901. \def\tunedef{\ifchord \relax
  902.                     \gdef\tune{\csname\the\notename\endcsname}%
  903.   \else\ifbeam \relax \else\stemdirectiondef\fi
  904.   \gdef\tune{\csname\the\notename\the\direction\endcsname}%
  905.   \ifgroup \global\d@rection\expandafter{\the\direction}\fi\fi}
  906. \def\stemdirectiondef{%
  907.   \ifnum\pitch<4 \stemuptrue  \direction={up}%
  908.            \else \stemupfalse \direction={down}\fi}
  909. %
  910. \def\calstemlup#1{\global\dur@tion=#1\relax\stemupeval of \pitch}
  911. \def\calstemldown#1{\global\dur@tion=#1\relax\stemdowneval of \pitch}
  912. %
  913. %ganze  noten \NOTEup=\NOTEdown
  914. %
  915. \def\NOTEup{\ifbeam\relax\else\global\stemlength=\z@\fi
  916.   \global\dur@tion = 0 \hbox{\music\whole}}
  917. \let\NOTEdown=\NOTEup
  918. \def\NOTE{\hbox{\music\whole}\global\dur@tion = 0}
  919. %
  920. %Halbenoten, Hals aufwaerts , Hals abw"arts gestielt
  921. %
  922. \def\Note{\hbox{\music\half}\global\dur@tion = 1}
  923. \def\Noteup{\ifbeam\relax\else\calstemlup1\fi
  924.                    \hbox{\music\half \stemup}}
  925. \def\Notedown{\ifbeam\relax\else\calstemldown1\fi
  926.                      \hbox{\music\stemdown \half}}
  927. %
  928. %Viertelnoten, Hals aufwaerts , Hals abwaerts gestielt
  929. %
  930. \def\noteup{\ifbeam\relax\else\calstemlup2\fi
  931.                           \hbox{\music\quart\stemup}}
  932. \def\notedown{\ifbeam\relax\else\calstemldown2\fi
  933.                           \hbox{\music\stemdown\quart}}
  934. \def\note{\hbox{\music\quart}\global\dur@tion= 2}
  935. %
  936. %Achtelnoten, Hals aufwaerts , Hals abwaerts gestielt
  937. %
  938. \def\notE{\hbox{\music\quart}\global\dur@tion= 3}
  939. \def\notEup{\ifbeam\relax\else\calstemlup3\fi
  940.                           \hbox{\music\quart\flagup{\eighthup}}}
  941. \def\notEdown{\ifbeam\relax\else\calstemldown3\fi
  942.                           \hbox{\music\flagdown{\eighthdown}\quart}}
  943. %
  944. %Sechzehntelnoten, Hals aufwaerts , Hals abwaerts gestielt
  945. %
  946. \def\noTE{\hbox{\music\quart}\global\dur@tion= 4}
  947. \def\noTEup{\ifbeam\relax\else\calstemlup4\fi
  948.                    \hbox{\music\quart\flagup{\sixteenthup}}}
  949. \def\noTEdown{\ifbeam\relax\else\calstemldown4\fi
  950.                      \hbox{\music\flagdown{\sixteenthdown}\quart}}
  951. %
  952. %Zweiunddreissigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
  953. %
  954. \def\nOTE{\hbox{\music\quart}\global\dur@tion= 5}
  955. \def\nOTEup{\ifbeam\relax\else\calstemlup5\fi
  956.                    \hbox{\music\quart\flagup{\thirtytwoup}}}
  957. \def\nOTEdown{\ifbeam\relax\else\calstemldown5\fi
  958.                      \hbox{\music\flagdown{\thirtytwodown}\quart}}
  959. %
  960. %Vierundsechzigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
  961. %
  962. \def\nOte{\hbox{\music\quart}\global\dur@tion= 6}
  963. \def\nOteup{\ifbeam\relax\else\calstemlup6\fi
  964.                    \hbox{\music\quart\flagup{\sixtyfourup}}}
  965. \def\nOtedown{\ifbeam\relax\else\calstemldown6\fi
  966.                      \hbox{\music\flagdown{\sixtyfourdown}\quart}}
  967. %
  968. %Hundertachtundzwanzigstelnoten, Hals aufwaerts , Hals abwaerts gestielt
  969. %
  970. \def\nOtE{\hbox{\music\quart}\global\dur@tion= 7}
  971. \def\nOtEup{\ifbeam\relax\else\calstemlup7\fi
  972.                    \hbox{\music\quart\flagup{\hundredtwentyeightup}}}
  973. \def\nOtEdown{\ifbeam\relax\else\calstemldown7\fi
  974.                    \hbox{\music\flagdown{\hundredtwentyeightdown}\quart}}
  975. %       P A U S E N
  976. \def\PAUSE{{\music\wholerest}}
  977. \def\Pause{{\music\halfrest}}
  978. \def\pause{{\music\quartrest}}
  979. \def\pausE{{\music\eighthrest}}
  980. \def\pauSE{{\music\sixteenthrest}}
  981. \def\pauSE{{\music\sixteenthrest}} % bis auf weiteres, da diese im
  982. \def\paUSE{{\music\sixteenthrest}} %Zeichensatz noch nicht
  983. \def\pAuse{{\music\sixteenthrest}} %vorhanden sind.
  984. \def\pAusE{{\music\sixteenthrest}} %
  985. %       **************************************************              %
  986. %       *    Berechnung der Notenhalslaengen             *              %
  987. %       **************************************************              %
  988. \def\min@stemlength{\ifnum\dur@tion>2
  989.     \hc@i= 3 \advance\hc@i by \dur@tion \hd@i= \hc@i\seminhh
  990.    \ifdim\hd@i>\stemlength \global\stemlength=\hd@i\fi \fi}
  991. %Hals nach oben
  992. \def\stemupeval of #1{\pit@=#1\relax
  993.   \ifnum\pit@<-3 \advance\pit@ by -4 \global\stemlength=-\pit@\seminhh
  994.       \else\eval@up\fi\ifgroup\relax\else\min@stemlength\fi}
  995. \def\eval@up{\ifnum \pit@<6 \global\stemlength=7\seminhh
  996.       \else
  997.       \ifnum\pit@<8 \advance\pit@ by-12 \global\stemlength=-\pit@\seminhh
  998.         \else \global\stemlength=\twonhh
  999.         \fi\fi}
  1000. %
  1001. \def\stemdowneval of #1{\pit@=#1\relax
  1002.   \ifnum\pit@>11 \advance\pit@ by -4 \global\stemlength=\pit@\seminhh
  1003.   \else \eval@down\fi\ifgroup\relax\else\min@stemlength\fi}
  1004. \def\eval@down{\ifnum \pit@ > 2 \global\stemlength=7\seminhh
  1005.   \else\ifnum\pit@ > 0 \advance\pit@ 4 \global\stemlength=\pit@\seminhh
  1006.   \else \global\stemlength=\twonhh
  1007.   \fi\fi}
  1008. %       **************************************************              %
  1009. %       *    Konstruktion der Notenhaelse                *              %
  1010. %       **************************************************              %
  1011. %Hals nach oben
  1012. \def\stemup{\vrule height \stemlength depth\z@ width\stemwidth}
  1013. %Hals nach unten
  1014. \def\stemdown{\vrule height\z@ depth\stemlength width\stemwidth
  1015.   \hskip-2\stemwidth}
  1016. %Hals nach unten mit Fahne
  1017. \def\flagdown#1{\stemdown\ifbeam\relax\else
  1018.  \vtop to\stemlength{\offinterlineskip\null\vss\hbox{\music#1}\null}\fi}
  1019. %Hals nach oben mit Fahne
  1020. \def\flagup#1{\stemup\ifbeam\relax\else
  1021.       \vbox to\stemlength{\offinterlineskip\hbox{\music#1}\vss\null}\fi}
  1022. %
  1023. %Bestimmung des Notenhalses im Akkord
  1024. %
  1025. \def\stemdef{%
  1026.   \ifstemup\edef\stem{\hbox{\ifcase\dur@tion \noexpand\relax
  1027.     \or\stemup \or\stemup \or\flagup{\eighthup}%
  1028.     \or\flagup{\sixteenthup}\or\flagup{\thirtytwoup}%
  1029.     \or\flagup{\sixtyfourup}\or\flagup{\hundredtwentyeightup}%
  1030.     \else\noexpand\relax\fi}}%
  1031.   \else\edef\stem{\hbox{\ifcase\dur@tion  \noexpand\relax
  1032.     \or\stemdown \or\stemdown  \or\flagdown{\eighthdown}%
  1033.     \or\flagdown{\thirtytwodown}\or\flagdown{\sixteenthdown}%
  1034.     \or\flagdown{\sixtyfourdown}\or\flagdown{\hundredtwentyeightdown}%
  1035.     \else\noexpand\relax \fi}}%
  1036.   \fi}
  1037. % Setzen des Notenhalses im Akkord
  1038. \def\setstem{\relax
  1039.   \ifstemup $\raise\minpitch\seminhh\stem $%
  1040.   \else     $\raise\maxpitch\seminhh\stem $\fi}
  1041. %       **************************************************              %
  1042. %       *    Das Setzen  der Noten                       *              %
  1043. %       **************************************************              %
  1044. \def\setnotes#1{\relax\notename={#1}\global\nyshift=\pitch\seminhh
  1045.   \legerlines\tunedef
  1046.   \ifchord\setchord\else  \sethunkglue \setnote \fi
  1047.   }
  1048. %einzelne Note
  1049. \def\setnote{\global\setbox\notebox=
  1050.   \hboxnhw{$\raise\lyshift\box\legerbox$}{$\raise\nyshift\hbox{\tune}$}%
  1051.   \setakzent
  1052.   \box\hunkbox\kern\smkern\u@text\l@text\box\notebox
  1053.   \global\spaceskip=\csname\the\notename skip\endcsname\nobreak
  1054. %  \ifnum\dur@tion=0 \global\H@a@cor =\seminhw\fi
  1055.    \ifgroup \global \H@a@cor = \z@ \fi
  1056. }
  1057. %Akkorde
  1058. %Zusammenfassung der einzelnen Noten in \leftbox bzw. \rightbox
  1059. \def\setchord{%
  1060.   \ifnum\maxpitch<\pitch \global\maxpitch = \pitch\fi
  1061.   \ifnum\minpitch>\pitch \global\minpitch = \pitch\fi
  1062.   \chordlegerlines
  1063.   \ifleft
  1064.   \global\setbox\leftbox=
  1065.   \hboxnhw{\box\leftbox}{$\raise\nyshift\hbox{\tune}$}%
  1066.   \else
  1067.   \global\setbox\rightbox=
  1068.   \hboxnhw{\box\rightbox}{$\raise\nyshift\hbox{\tune}$}\fi
  1069.   }
  1070. %
  1071. \def\endchord{%
  1072.   \nobreak\global\sk=\csname\the\notename skip\endcsname
  1073.   \ifbeam \relax \else\chordnobeam\fi
  1074.   \hc@i=\maxpitch \advance\hc@i-\minpitch
  1075.   \global\advance\stemlength by \hc@i\seminhh
  1076.   \stemdef
  1077.   \ifgroup \global\H@a@cor=\z@
  1078.           \ifstemup
  1079.            \ifdim\wd\rightbox>\z@ \global\advance\H@a@cor by \nhw \fi
  1080.            \fi
  1081.            \global\advance\H@a@cor by \wd\dotbox
  1082.            \global\d@rection\expandafter{\the\direction}%
  1083.   \fi
  1084.   \global\setbox\notebox=
  1085.   \hbox{\box\leftbox\setstem\box\rightbox\box\dotbox}%
  1086.   \setchordakzent
  1087.   \box\hunkbox\kern\smkern\u@text\l@text\box\notebox\chordfalse\endgroup}
  1088. \def\chordnobeam{\relax\ifstemup \stemupeval of \maxpitch
  1089.                       \else    \stemdowneval of \minpitch\fi
  1090.                \ifgroup\ifstemup\chordlowerstartpoints
  1091.                        \else\chordupperstartpoints\fi
  1092.                \fi}
  1093. %       ***********************************************************     %
  1094. %       * Tonarten und Aufloesung, Notenschluessel und Taktangabe *     %
  1095. %       ***********************************************************     %
  1096. %\discretionary{vor}{nach}{kein}
  1097. \def\change{\edef\-{\noexpand\discretionary{}%vor
  1098.                    {\noexpand\hbox{\noexpand\lines}%
  1099.                     \noexpand\hbox{\the\cleftoks\the\signtoks}%
  1100.                     \noexpand\kern\noexpand\seminhw}%nach
  1101.                    {}}}%kein
  1102. \def\signchange{\change\gluebrule\discretionary{%
  1103.   \hbox{\doppelstrich\set@rulesk\the\canceltoks\the\signtoks\set@rulesk
  1104.   }}{\hbox{\lines\the\cleftoks\the\signtoks}\kern\seminhw}{%
  1105.   \hbox{\doppelstrich\set@rulesk\the\canceltoks\the\signtoks}}%
  1106.   \set@rulesk}
  1107. \def\clefchange{\change\setbox\hunkbox=\hbox{\unhbox\hunkbox%
  1108.   \kern\p@{{\let\music=\smallmusic\the\cleftoks}}}}
  1109. %Taktangabe
  1110. \def\meter#1/#2{\nobreak\gluebmeter\discretionary{%
  1111.   \hbox{\place4{#1}\kern-\wd\placebox\place0{#2}}\kern\seminhw
  1112.   }{\hbox{\lines\the\cleftoks\the\signtoks\set@rulesk
  1113.   \hbox{\place4{#1}\kern-\wd\placebox\place0{#2}}}\kern0.25\seminhw}%
  1114.   {\hbox{\place4{#1}\kern-\wd\placebox\place0{#2}%
  1115.   \kern0.5\seminhw}}\set@rulesk}
  1116. % \kern\seminhw}}\set@rulesk}
  1117. \def\place#1#2{\setbox\placebox\hbox{\rm#2}$\raise#1.5\seminhh\hbox{\copy
  1118.   \placebox}$}
  1119. %Vorzeichnung
  1120. \def\signature#1#2{\global\signtoks={#1\kern\nhw}%
  1121.   \iffirst\change\box\hunkbox\the\signtoks\set@rulesk
  1122.   \else\signchange\fi\global\canceltoks={#2}}
  1123. %Notenschluessel
  1124. \def\clef#1#2{\global\clefcount=#1
  1125.   \global\cleftoks={\setkey{#2}\kern\seminhw}%
  1126.   \clefchange}
  1127. %Abkuerzungen fuer Vorzeichnungen - gro\3e Buchstaben =Dur-Tonarten
  1128. %                                   kleine Buchstaben =Moll-Tonarten
  1129. \def\F{\signature{\b@4}{\n@4}}
  1130. \def\B{\signature{\b@4\b@7}{\n@4\n@7}}
  1131. \def\Es{\signature{\b@4\b@7\b@3}{\n@4\n@7\n@3}}
  1132. \def\As{\signature{\b@4\b@7\b@3\b@6}{\n@4\n@7\n@3\n@6}}
  1133. \def\Des{\signature{\b@4\b@7\b@3\b@6\b@2}{\n@4\n@7\n@3\n@6\n@2}}
  1134. \def\Ges{\signature{\b@4\b@7\b@3\b@6\b@2\b@5}{\n@4\n@7\n@3\n@5\n@2\n@5}}
  1135. \def\Ces{\signature{\b@4\b@7\b@3\b@6\b@2\b@5\b@1}%
  1136.   {\n@4\n@7\n@3\n@5\n@2\n@5\n@1}}
  1137. \def\C{\signature{}{}}
  1138. \def\G{\signature{\x@8}{\n@8}}
  1139. \def\D{\signature{\x@8\x@5}{\n@8\x@5}}
  1140. \def\A{\signature{\x@8\x@5\x@9}{\n@8\n@5\n@9}}
  1141. \def\E{\signature{\x@8\x@5\x@9\x@6}{\n@8\n@5\n@9\n@6}}
  1142. \def\H{\signature{\x@8\x@5\x@9\x@6\x@3}{\n@8\n@5\n@9\n@6\n@3}}
  1143. \def\Fis{\signature{\x@8\x@5\x@9\x@6\x@3\x@4}{\n@8\n@5\n@9\n@6\n@3\n@4}}
  1144. \let\mdis=\F                 \let\ma=\C
  1145. \let\mgis=\H                 \let\md=\F
  1146. \let\mcis=\E                 \let\mg=\B
  1147. \let\mfis=\A                 \let\mc=\Es
  1148. \let\mh=\D                   \let\mf=\As
  1149. \let\me=\G                   \let\mb=\Des
  1150.                              \let\mes=\Ges
  1151. %Notenschluessel
  1152. \def\setkey#1{\hbox{\music#1}}
  1153. \def\vio{\clef{0}{\mviolin}}
  1154. \def\viooct{\clef{0}{\mviolinoct}}% noch nicht im Font
  1155. \def\vioOct{\clef{0}{\mviolinOct}} % noch nicht im Font
  1156. \def\bass{\clef{-2}{\mbass}}
  1157. \def\bassoct{\clef{-2}{\mbassoct}}   %noch nicht im Font
  1158. \def\bassOct{\clef{-2}{\mbassOct}}   %noch nicht im Font
  1159. \def\bariton{\clef{3}{\mbariton}}
  1160. \def\tenor{\clef{1}{\mtenor}}
  1161. \def\alto{\clef{-1}{\malt}}
  1162. \def\mezzosopran{\clef{-3}{\mmezzosopran}}
  1163. \def\sopran{\clef{-5}{\msopran}}
  1164. %       **************************************************              %
  1165. %       *    Die Verarbeitung der Nachbarschaften        *              %
  1166. %       **************************************************              %
  1167. \mathsurround=\z@
  1168. %       **************************************************              %
  1169. %       * Initialisierung der Listen einer Notengruppe   *              %
  1170. %       **************************************************              %
  1171. %Gruppe belegt die notwendigen Listen fuer die Notengruppe
  1172. \def\group#1#2{\grouptrue
  1173.   \global\oldskip=\sk
  1174.   \let\u@@text = \u@text
  1175.   \let\l@@text = \l@text
  1176.   \global\setbox\neighborhood=\null
  1177.   \gdef\elementlist{#1}\gdef\pitchlist{#2}%
  1178.   \gdef\H@list{}\gdef\stemlist{}%
  1179.   \gdef\uslurlist{}\gdef\lslurlist{}%
  1180.   \gdef\H@corlist{}%
  1181.   \gdef\dir@list{}%
  1182.   \global\sl@c=\z@
  1183.   \global\S=0
  1184.   \N=0
  1185.   \long\def\\##1{%
  1186.   \global\E@l=\z@\global\E@u=\z@%zuruecksetzen auf 0pt
  1187.   \global\setbox\neighborhood=\hbox{\unhbox\neighborhood##1}%
  1188.   \rightappend0pt\to\stemlist       %initialisiert \stemlist
  1189.   \expandafter\rightappend\the\wd\neighborhood\to\H@list%belegt \H@list
  1190.   \expandafter\rightappend\the\E@u\to\uslurlist
  1191.                                     %belegt obere startpunkte fuer slurs
  1192.   \expandafter\rightappend\the\E@l\to\lslurlist
  1193.                                     %belegt untere startpunkte fuer slurs
  1194.   \expandafter\rightappend\the\H@a@cor\to\H@corlist
  1195.                                     %initialisiert \H@corlist
  1196.   \global\H@a@cor=\z@%zuruecksetzen auf 0pt
  1197.   \expandafter\rightappend\the\d@rection\to\dir@list
  1198.                                     %initialisiert \dir@list
  1199.   \advance\N1 }\elementlist\groupfalse
  1200.   }
  1201. %       **************************************************              %
  1202. %       * Abarbeitung & Setzen einer Notengruppe         *              %
  1203. %       **************************************************              %
  1204. \def\go{%
  1205.   \let\u@text=\u@@text
  1206.   \let\l@text=\l@@text
  1207.   \m@ii=0 \long\def\\##1{\advance\m@ii 1
  1208.   {\assign\m@ii\of\stemlist\to\stemlength}%
  1209.   \ifdim\stemlength=\z@\beamfalse\else\beamtrue\fi##1}%
  1210.  \global\sk=\oldskip
  1211.  \sethunkglue\hbox{\global\sk=\z@skip\elementlist}\nobreak
  1212.  \beamfalse}
  1213. %       **************************************************              %
  1214. %       * Verbalkung - Eingabemacros                     *              %
  1215. %       **************************************************              %
  1216. % Eingabemacros - Balken oberhalb - Balken unterhalb der Notengruppe
  1217. \def\ubeam#1#2{\stemuptrue  \n@a=#1 \n@e=#2 \direction{up}%
  1218.   \putdir{up}\from\n@a\to\n@e\b@@m}
  1219. %
  1220. \def\lbeam#1#2{\stemupfalse \n@a=#1 \n@e=#2 \direction{down}%
  1221.   \putdir{down}\from\n@a\to\n@e\b@@m}
  1222. %
  1223. \def\b@@m{%
  1224.   %Initialisierung
  1225.   \additem{\noexpand\direction{\the\direction}}{}\in\elementlist\at\n@a
  1226.   \ifnum\n@e>\N \n@e=\N\fi
  1227.   \global\minsl=2\nhh
  1228.   \assign\n@a\of\pitchlist\to\P@a
  1229.   \assign\n@e\of\pitchlist\to\P@e
  1230.   \assign\n@e\of\H@list\to\H@e
  1231.   \assign\n@a\of\H@list\to\H@a
  1232.   \select\n@a\of\dir@list\to\dir@i
  1233.   \lokalassign\n@a\of\H@corlist\to\hd@i  % vorne verkuerzt
  1234.   \ifx\dir@i\down@\advance\hd@i \nhw \fi
  1235.   \global\advance\H@a by-\hd@i
  1236.   \lokalassign\n@e\of\H@corlist\to\hd@i  % und hinten verkuerzt
  1237.   \select\n@e\of\dir@list\to\dir@i
  1238.   \ifx\dir@i\down@\advance\hd@i \nhw \fi
  1239.   \global\advance\H@e by-\hd@i
  1240.   \global\advance\H@e by-\H@a
  1241.   %Berechnung der Steigung
  1242.   \csname gradient\the\direction\endcsname%
  1243.   %Anpassung der Notenhaelse
  1244.   \csname calstems\the\direction\endcsname%
  1245.   %Positionierung des Balkens
  1246.   \beaming
  1247.   %Addieren der berechneten Halsl"angenkorrektur in der \stemlist
  1248.   \addslc\in\stemlist\from\n@a\to\n@e
  1249.   \global\advance\sl@c \seminhh
  1250.   %Korrektur der Bogenangfangspunkte oberhalb bzw. unterhalb der Noten
  1251.   \ifstemup\relax
  1252.         \addslc\in\uslurlist\from\n@a\to\n@e
  1253.       \else \relax\global\sl@c=-\sl@c
  1254.         \addslc\in\lslurlist\from\n@a\to\n@e
  1255.         \global\sl@c=-\sl@c
  1256.       \fi
  1257.   \global\sl@c=\z@
  1258.   }
  1259. %       **************************************************              %
  1260. %       * Berechnungen der Halslaengen und Steigung      *              %
  1261. %       **************************************************              %
  1262. \def\gradientup{\gradient{<}{+}}
  1263. \def\gradientdown{\gradient{>}{-}}
  1264. \def\gradient#1#2{%
  1265.   \R@a=\P@a\seminhh
  1266.   \R@e=\P@e\seminhh
  1267. %jetzt erst die Stemhoehe berechnen.
  1268.   \ifstemup \stemupeval of \P@a \s@a=\stemlength
  1269.             \stemupeval of \P@e \s@e=\stemlength
  1270.   \else     \stemdowneval of \P@a \s@a=\stemlength
  1271.             \stemdowneval of \P@e \s@e=\stemlength
  1272.   \fi
  1273.   \global\E@a=\R@a \global\advance \E@a by#2\s@a
  1274.   \global\E@e=\R@e \global\advance \E@e by#2\s@e
  1275.   \ifnum\P@a=\P@e \global\S=0
  1276.   \else\global\flagc=1
  1277.     \ifnum\P@a#1\P@e \gradz@\in\pitchlist\with#1\the\P@e\from\n@a\to\n@e
  1278.     \else          \gradz@\in\pitchlist\with#1\the\P@a\from\n@a\to\n@e\fi
  1279.     \ifnum\flagc=0 \global\S=0\else \global\S=1\fi
  1280.   \fi
  1281.   \relax
  1282.   \ifnum\S = 0 \relax
  1283.     \ifdim\E@a#1\E@e \global\E@a=\E@e \s@a=#2\E@a \advance\s@a-#2\R@a \fi
  1284.   \else
  1285.     \distance\E@a\E@e
  1286.     \ifdim\Abs=\z@\relax
  1287.        \ifnum\P@e#1\P@a \corrc\s@a
  1288.        \global\E@a=\R@a\global\advance\E@a by#2\s@a\relax
  1289.        \else         \corrc\s@e
  1290.        \global\E@e=\R@e\global\advance\E@e by#2\s@e\relax\fi
  1291.     \fi
  1292.     \distance\E@a\E@e
  1293.     \limit=0.45 \H@e
  1294.     \ifdim\limit>4\nhh \limit=4\nhh \fi
  1295.     \hd@i=\Abs\advance\hd@i by -\limit  \corr=\hd@i
  1296.     \ifdim\corr>\z@\relax
  1297.       \ifnum\P@a#1\P@e \corrb\s@a
  1298.       \global\E@a=\R@a\global\advance\E@a by#2\s@a\relax
  1299.       \else\corrb\s@e\global\E@e=\R@e\global\advance\E@e by#2\s@e\fi
  1300.       \Abs=\corr
  1301.     \fi
  1302.     \ifnum\P@a>\P@e\global\S=-\Abs\else\global\S=\Abs\fi
  1303.     \global\multiply\S by 100 \global\divide\S by \H@e
  1304.   \fi                  %von P@a=Pb Abfrage
  1305. %\s@a und \s@e zurueckpacken an \n@a-te bzw. \N-te Stelle  der \stemlist
  1306.     \expandafter\exchange\the\s@a\in\stemlist\at\n@a
  1307.     \expandafter\exchange\the\s@e\in\stemlist\at\n@e
  1308.   \whatisnewstartpoint
  1309.   \assignS}
  1310. %
  1311. \def\calstemsup{\calstems{+}}
  1312. \def\calstemsdown{\calstems{-}}
  1313. \def\calstems#1{%
  1314.   \n@i=\n@a
  1315.   \global\sl@c=\z@
  1316.   \EP@=\E@a
  1317.   \loop\advance\n@i by 1
  1318.     \assign\n@i\of\pitchlist\to\P@i
  1319.     \R@i=\P@i\seminhh
  1320.     \getendpoint\n@i\EP@i
  1321.     \s@i=\EP@i
  1322.     \advance\s@i by-\R@i        %Laenge des stems
  1323.     \s@i=#1\s@i
  1324.     \expandafter\exchange\the\s@i\in\stemlist\at\n@i
  1325.     \whatarenewstartpoints
  1326.     \ifdim\s@i<\minsl\relax
  1327.       \ifdim\s@i<\z@ \s@i=-\s@i\advance\s@i by \minsl
  1328.       \else\s@i=\R@i\advance\s@i by #1\minsl\advance\s@i by-\EP@i\s@i=#1\s@i\fi
  1329.       \ifdim\s@i>\sl@c\relax\global\sl@c=\s@i\fi
  1330.     \fi
  1331.   \ifnum\n@i<\n@e \repeat
  1332.   }
  1333. %
  1334. %Auswertung der \beamlist
  1335. \def\evalbeamlist#1-#2,#3#{\def\aa{#1}\def\bb{#2}%
  1336.   \ifx\aa\empty\m@a=0\else\m@a=#1\fi
  1337.   \ifx\bb\empty\m@e=\m@a\else\m@e=#2\fi\def\nxt{#3}%
  1338.   \ifnum\m@a<0\m@a=0\fi     %belegung von m@a und m@e, so dass in
  1339.   \ifnum\m@a>\N\m@a=\N\fi   %createbeam keine schwierigkeiten auftauchen
  1340.   \ifnum\m@e<1\m@e=1\fi     %koennen, z.B. bei \assign usw.
  1341.   \ifnum\m@e>\N\m@e=\N\fi   %0<=\m@a<=\N;  1<=\m@e<=\N
  1342.   \ifnum\m@e<\m@a\hc@i=\m@a\m@a=\m@e\m@e=\hc@i\fi
  1343. }
  1344. %
  1345. \def\beamposition{%
  1346.     \assign\m@a\of\H@list\to\H@m@a
  1347.     \assign\m@a\of\H@corlist\to\H@a@cor
  1348.     \select\m@a\of\dir@list\to\dir@i
  1349.     \relax\ifx\dir@i\down@ \global\advance\H@a@cor \nhw \fi
  1350.     \global\advance\H@m@a by -\H@a@cor
  1351.     \V@a=\H@m@a
  1352.     \advance\V@a-\H@a
  1353.     \multiply\V@a by\S  \V@a=0.01\V@a
  1354.     \ifstemup  \advance \V@a by \sl@c \relax
  1355.     \else      \advance \V@a by-\sl@c
  1356.     \fi
  1357.     \advance\V@a by \EP@
  1358.     \ifstemup\ifnum\S<0 \relax
  1359.                          \else \advance \V@a-\beamthickness \fi
  1360.     \else
  1361.          \ifnum\S<0 \advance\V@a \beamthickness\fi
  1362.     \fi
  1363.     \ifstemup
  1364.         \advance\V@a by-\beamrow\nhh%zur Platzierung der Balken
  1365.      \else
  1366.         \advance\V@a by \beamrow\nhh%zur Platzierung der Balken
  1367.     \fi
  1368.     }
  1369. \def\createbeam{%
  1370.   \looop\expandafter\evalbeamlist\nxt{}%
  1371.   \ifnum\m@a>0\beamposition
  1372.     \ifnum\m@e=\m@a\relax
  1373. %%      \immediate\write0{rrule \the\S}%
  1374.         \additem{}{\noexpand\beamr{\the\S}%
  1375.         {\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
  1376.     \else \lokalassign\m@e\of\H@list\to\hd@i
  1377.           \lokalassign\m@e\of\H@corlist\to\hd@ii
  1378.           \select\m@e\of\dir@list\to\dir@i
  1379.           \relax\ifx\dir@i\down@ \advance\hd@ii\nhw \fi
  1380.           \advance\hd@i by-\hd@ii
  1381.           \advance\hd@i by-\H@m@a
  1382. %%        \immediate\write0{rule \the\hd@i}%
  1383.           \additem{}{\noexpand\beam{\the\S}%
  1384.           {\the\hd@i}{\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
  1385.     \fi
  1386.   \else
  1387.     \m@a=\m@e\beamposition
  1388. %%  \immediate\write0{lrule \the\S}%
  1389.     \additem{}{\noexpand\beaml{\the\S}%
  1390.     {\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a
  1391.   \fi
  1392.   \ifx\nxt\empty\relax\leave%
  1393.   }
  1394. %
  1395. \def\beaming{\cardinality\beamlist\to\hc@i%
  1396.   \ifnum\hc@i>2 \advance\hc@i-2 \global\advance\sl@c by\hc@i\seminhh\fi
  1397.   \global\beamrow0
  1398.   \def\\##1{{\def\nxt{##1}\relax\createbeam\global\advance\beamrow 1%
  1399.   }}\beamlist}
  1400. %       **************************************************              %
  1401. %       *  Plazierung und Zusammensetzung der Balken     *              %
  1402. %       **************************************************              %
  1403. \def\beam#1#2#3#4{\global\S=#1\global\L@a=#2%
  1404.   $\raise#3\hbox to \z@{\kern-#4\drawbeam\hss}$}
  1405. \def\beamr#1#2#3{\global\S=#1%
  1406.   $\raise#2\hbox to\z@{\kern-#3\drawbe@m\hss}$}
  1407. \def\beaml#1#2#3{\global\S=#1$\raise#2\hbox to\z@{\hss
  1408.   \drawb@@m\ifstemup\else\kern\nhw\fi}$}
  1409. %
  1410. \def\putintovbox#1{%
  1411.      \ifstemup
  1412.        \ifnum\S>0 \vb@@{#1}\else \vt@@{#1}\fi
  1413.      \else
  1414.        \ifnum\S<0 \vt@@{#1}\else \vb@@{#1}\fi
  1415.      \fi}
  1416. \def\putintovb@x#1{%
  1417.      \ifstemup
  1418.        \ifnum\S<0 \vt@@{#1}\else \vb@@{#1}\fi
  1419.      \else
  1420.        \ifnum\S<0 \vb@@{#1}\else\vt@@{#1}\fi
  1421.      \fi}
  1422. %
  1423. \def\makebeam{\loop
  1424.       \ifodd\L@
  1425.          $\raise\SHIFT\hbox{\beamfont\char\the\CODE}$%
  1426.          \advance\SHIFT by \l@\gradfactor
  1427.       \fi
  1428.       \divide\L@ 2 \addC1 \multiply\l@2
  1429.       \ifnum\L@>0\repeat}
  1430. %
  1431. \def\drawbeam{%
  1432.   {\gradfactor=\S\p@ \gradfactor = 0.005 \gradfactor
  1433.   \ifnum\S=0
  1434.     \hbox{\vrule height \beamthickness depth\z@ width\L@a}%
  1435.   \else\l@=1\assignCODE
  1436.   \L@=\L@a
  1437.   \advance \L@ by 32677%um Rundungsfehler zu vermeiden
  1438.   \divide\L@ by 32678%Genauigkeit 0.5pt
  1439.   \SHIFT=\z@
  1440.   \putintovbox{\beamfont \ifnum \L@ >255 \setlongbeams\fi \makebeam}%
  1441.   \fi}}
  1442. \def\setlongbeams{\relax\hc@i=\CODE \advance\hc@i 7%
  1443.                    \loop$\raise\SHIFT\hbox{\char\the\hc@i}$%
  1444.                    \advance\SHIFT 128 \gradfactor \advance\L@-255
  1445.                    \ifnum \L@>255 \repeat}
  1446. %
  1447. \def\drawbe@m{%
  1448.   \ifnum\S=0\hbox{\vrule height \beamthickness depth \z@ width\nhh}%
  1449.   \else\assignCODE\addC3\putintovbox{\beamfont\char\the\CODE}\fi}
  1450. \def\drawb@@m{%
  1451.   \ifnum\S=0\hbox{\vrule height \beamthickness depth \z@ width\nhh}%
  1452.   \else\assignCODE\addC3\putintovb@x{\beamfont\char\the\CODE}\fi}
  1453. %       **************************************************              %
  1454. %       *    Die Bogen                                   *              %
  1455. %       **************************************************              %
  1456. %-Eingabemacros - Bogen oberhalb - Bogen unterhalb der Notengruppe
  1457. \def\uslur#1#2{\n@a=#1\n@e=#2%
  1458.   %Initialisierung
  1459.   \inislur
  1460.   \assign\n@a\of\uslurlist\to\E@a
  1461.   \assign\n@e\of\uslurlist\to\E@e
  1462.   \assignflags
  1463.   %Berechnung der entgueltigen Bogenbreite
  1464.   %Belegung des Anfangs- und Endpunktes des Bogens
  1465.   %Berechnung des horizontalen Versatzes des Bogens
  1466.   \ifdim\s@a=\z@ \ifdim\s@e=\z@ \u@nobeaming \else \u@rightbeaming \fi
  1467.       \else \ifdim\s@e=\z@ \u@leftbeaming \else\u@leftrightbeaming\fi
  1468.   \fi
  1469.   %Berechnung der Laenge des Bogens
  1470.   \intslurwidth
  1471.   %Berechnung der Sekantensteigung
  1472.   \gradientslur{<}{-}%
  1473.   %Positionierung des Bogens
  1474.   \ifnum\slurwidth > 17 \caluphrase
  1475.   \else
  1476.      \assignuslurchar
  1477.      \ifnum\V@int=0\setslurs{2}{0}\else
  1478.      \ifdim\V@<\z@\setslurs{0}{-1}\else\setslurs{0}{+1}\fi\fi
  1479.   \fi
  1480. }
  1481. \def\lslur#1#2{\n@a=#1\n@e=#2%
  1482.   %Initialisierung
  1483.   \inislur
  1484.   \assign\n@a\of\lslurlist\to\E@a
  1485.   \assign\n@e\of\lslurlist\to\E@e
  1486.   \assignflags
  1487.   %Berechnung der entgueltigen Bogenbreite
  1488.   %Belegung des Anfangs- und Endpunktes des Bogens
  1489.   %Berechnung des horizontalen Versatzes des Bogens
  1490.   \ifdim\s@a=\z@ \ifdim\s@e=\z@ \l@nobeaming \else \l@rightbeaming \fi
  1491.       \else \ifdim\s@e=\z@ \l@leftbeaming \else\l@leftrightbeaming\fi
  1492.   \fi
  1493.   %Berechnung der Laenge des Bogens
  1494.   \intslurwidth
  1495.   %Berechnung der Sekantensteigung
  1496.   \gradientslur{>}{+}%
  1497.   %Positionierung des Bogens
  1498.   \ifnum\slurwidth > 17 \callphrase
  1499.   \else
  1500.     \assignlslurchar
  1501.     \ifnum\V@int=0\setslurs{3}{0}\else
  1502.      \ifdim\V@<\z@\setslurs{1}{-1}\else\setslurs{1}{+1}\fi\fi
  1503.   \fi
  1504. }
  1505. %
  1506. \def\intslurwidth{%
  1507.   %\slurwidth*\nhw  <= \H@e < (\slurwidth+1)*\nhw
  1508.  \slurwidth=\H@e
  1509.  \advance\slurwidth \seminhw
  1510.  \divide\slurwidth by \nhw
  1511.  \ifnum\slurwidth< 1 \slurwidth= 1 \fi}
  1512. %Hilfsfunktionen
  1513. \def\newslurwidth#1#2{%
  1514.   \ifcase#1 \global\advance\H@e #2\nhw
  1515.   \or       \global\advance\H@e #2\seminhw \fi}
  1516. \def\calslurwidth{\global\advance\H@e-\H@e@cor
  1517.                    \global\advance\H@a-\H@a@cor
  1518.                    \global\advance\H@e-\H@a\relax}
  1519. \def\calslurcor#1{\slurcor=\H@a@cor \advance\slurcor #1\seminhw
  1520.  \slurcor = -\slurcor}
  1521. \def\newE@a#1{\ifnum\flaga=0 \global\E@a=\P@a\seminhh
  1522.   \global\advance\E@a#1\nhh \fi}
  1523. \def\newE@e#1{\ifnum\flagb=0 \global\E@e=\P@e\seminhh
  1524.   \global\advance\E@e#1\nhh \fi}
  1525. \def\inislur{\relax
  1526.   \ifnum\n@e>\N \n@e=\N\fi
  1527.   \ifnum\n@a<1  \n@a= 1\fi
  1528.   \ifnum\n@a>\n@e\n@e=\hc@i \n@e=\n@a \n@a=\hc@i\fi
  1529.   %
  1530.   \assign\n@e\of\H@list\to\H@e
  1531.   \lokalassign\n@e\of\H@corlist\to\H@e@cor
  1532.   \assign\n@a\of\H@list\to\H@a
  1533.   \assign\n@a\of\H@corlist\to\H@a@cor
  1534.   \select\n@a\of\dir@list\to\dir@a
  1535.   \select\n@e\of\dir@list\to\dir@e
  1536.   \ifx\dir@a\down@ \global\advance\H@a@cor \nhw \fi
  1537.   \ifx\dir@e\down@ \advance\H@e@cor \nhw \fi
  1538.   %
  1539.   \assign\n@e\of\pitchlist\to\P@e
  1540.   \assign\n@a\of\pitchlist\to\P@a
  1541.   \lokalassign\n@e\of\stemlist\to\s@e
  1542.   \lokalassign\n@a\of\stemlist\to\s@a
  1543. }
  1544. \def\assignflags{%
  1545.    \flaga=2 \ifdim \E@a=\z@ \flaga=0 \fi
  1546.   \ifdim\E@a> \I@@ \flaga=1 \global\advance \E@a-\I@@\fi
  1547.   \ifdim\E@a<-\I@@ \flaga=1 \global\advance \E@a-\I@@\fi
  1548.   \flagb=2\ifdim \E@e =\z@ \flagb=0\fi
  1549.   \ifdim\E@e> \I@@ \flagb=1 \global\advance \E@e-\I@@\fi
  1550.   \ifdim\E@e<-\I@@ \flagb=1 \global\advance \E@e \I@@\fi
  1551.   \relax}
  1552. %
  1553. %ohne Verbalkung
  1554. \def\u@nobeaming{\calslurwidth
  1555.   \ifx\dir@e\up@ \relax\newslurwidth{0}{-}\fi %stemup
  1556.   \calslurcor{-}\newE@a{+}\newE@e{+}}
  1557. %
  1558. \def\l@nobeaming{\calslurwidth
  1559.   \ifx\dir@a\down@ \newslurwidth{0}{-}\fi%stemdown
  1560.   \ifx\dir@a\up@\calslurcor{+}\else \calslurcor{-}\fi
  1561.   \newE@a{-}\newE@e{-}}
  1562. % Verbalkung nur in \n@e
  1563. \def\u@rightbeaming{\ifnum\flagb<2 \u@rightstemdown \else
  1564.   \u@rightstemup \fi}
  1565. \def\u@rightstemdown{\calslurwidth
  1566.   \calslurcor{-}\newE@a{+}\newE@e{+}}
  1567. \def\u@rightstemup{\calslurwidth
  1568.   \advance\n@e-1
  1569.   \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{+}\newE@e{+}%
  1570.   \else\newslurwidth{1}{-}\calslurcor{-}\newE@a{+}%\E@e belegt
  1571.   \fi\advance\n@e1}
  1572. %
  1573. \def\l@rightbeaming{\ifnum\flagb<2 \l@rightstemup \else
  1574.   \l@rightstemdown \fi}
  1575. \def\l@rightstemup{\calslurwidth
  1576.   \ifx\dir@a\down@ \newslurwidth{0}{-}\fi
  1577.   \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}\newE@e{-}}
  1578. \def\l@rightstemdown{\calslurwidth
  1579.   \advance\n@e-1
  1580.   \ifnum\n@e=\n@a \ifx\dir@a\up@\newslurwidth{0}{-}\fi
  1581.     \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}\newE@e{-}%
  1582.   \else\ifx\dir@a\up@\newslurwidth{1}{+}\else\newslurwidth{1}{-}\fi
  1583.     \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}%\E@e belegt
  1584.   \fi\advance\n@e 1 }
  1585. %
  1586. % Verbalkung nur in \n@a
  1587. \def\u@leftbeaming{\ifnum\flaga<2 \u@leftstemdown \else
  1588.   \u@leftstemup \fi}
  1589. \def\u@leftstemdown{\calslurwidth
  1590.   \ifx\dir@e\up@\newslurwidth{0}{-}\fi
  1591.   \calslurcor{-}\newE@a{+}\newE@e{+}}
  1592. \def\u@leftstemup{\calslurwidth
  1593.   \advance\n@e-1
  1594.   \ifnum\n@e=\n@a \ifx\dir@e\up@\newslurwidth{0}{-}\fi
  1595.   \calslurcor{-}\newE@a{+}\newE@e{+}%
  1596.   \else\ifx\dir@e\up@\newslurwidth{1}{-}\else\newslurwidth{1}{+}\fi
  1597.   \slurcor=-\H@a@cor \newE@e{+}%\E@a belegt
  1598.   \fi\advance\n@e1}
  1599. %
  1600. \def\l@leftbeaming{\ifnum\flaga<2 \l@leftstemup \else
  1601.   \l@leftstemdown \fi}
  1602. \def\l@leftstemup{\calslurwidth
  1603.   \calslurcor{+}\newE@a{-}\newE@e{-}}
  1604. \def\l@leftstemdown{\calslurwidth
  1605.   \advance\n@e-1
  1606.   \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{-}\newE@e{-}%
  1607.   \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{-}%\E@a belegt
  1608.   \fi\advance\n@e 1 }
  1609. %
  1610. % Verbalkung in beiden Faellen
  1611. \def\u@leftrightbeaming{\ifnum\flagb<2 \u@stemdown \else \u@stemup \fi}
  1612. \def\u@stemdown{%
  1613.   \ifnum\flaga<2 \u@stemdownstemdown \else \u@stemupstemdown \fi}
  1614. \def\u@stemdownstemdown{\calslurwidth
  1615.   \calslurcor{-}\newE@a{+}\newE@e{+}}
  1616. \def\u@stemupstemdown{\calslurwidth
  1617.   \advance\n@e-1
  1618.   \ifnum\n@e=\n@a \calslurcor{-}\newE@a{+}\newE@e{+}%
  1619.   \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{+}%\E@a belegt
  1620.   \fi\advance\n@e 1 }
  1621. \def\u@stemup{%
  1622.   \ifnum\flaga<2 \u@stemdownstemup \else \u@stemupstemup \fi}
  1623. \def\u@stemdownstemup{\calslurwidth
  1624.   \advance\n@e-1
  1625.   \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{+}\newE@e{+}%
  1626.   \else\newslurwidth{1}{-}\calslurcor{-}\newE@a{+}%\E@e belegt
  1627.   \fi\advance\n@e 1 }
  1628. \def\u@stemupstemup{\calslurwidth
  1629.   \slurcor=-\H@a@cor}%E@a,E@e belegt
  1630. %
  1631. \def\l@leftrightbeaming{\ifnum\flaga<2 \l@stemup \else \l@stemdown \fi}
  1632. \def\l@stemup{%
  1633.   \ifnum\flagb<2 \l@stemupstemup \else \l@stemupstemdown \fi}
  1634. \def\l@stemupstemup{\calslurwidth
  1635.   \calslurcor{+}\newE@a{-}\newE@e{-}}
  1636. \def\l@stemupstemdown{\calslurwidth
  1637.   \advance\n@e-1
  1638.   \ifnum\n@e=\n@a \calslurcor{+}\newE@a{-}\newE@e{-}%
  1639.   \else\newslurwidth{1}{+}\calslurcor{+}\newE@a{-}%\E@e belegt
  1640.   \fi\advance\n@e 1 }
  1641. \def\l@stemdown{%
  1642.   \ifnum\flagb<2 \l@stemdownstemup \else \l@stemdownstemdown \fi}
  1643. \def\l@stemdownstemup{\calslurwidth
  1644.   \advance\n@e-1
  1645.   \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{+}\newE@a{-}\newE@e{-}%
  1646.   \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{-}%\E@a belegt
  1647.   \fi\advance\n@e 1 }
  1648. \def\l@stemdownstemdown{\calslurwidth\slurcor=-\H@a@cor}%E@a,E@e belegt
  1649. %
  1650. %Sekantensteigung
  1651. \def\gradientslur#1#2{%
  1652.   \ifdim\E@a=\E@e \V@int=0 \V@=\z@%auswaehlen von angemessenen Boegen
  1653.   \else
  1654.     \V@ = \E@e \advance \V@ by -\E@a
  1655.     \ifdim\V@>\z@  \V@int=\V@ \else \V@int=-\V@ \fi
  1656.     \advance\V@int \V@int \advance\V@int \seminhh \divide \V@int by 2
  1657.     \divide \V@int by \seminhh
  1658.     \ifnum\V@int>8 \V@int=8 \else \ifnum\slurwidth<4
  1659.        \hc@i=\slurwidth \multiply \hc@i2
  1660.        \ifnum\hc@i<\V@int \V@int=\hc@i
  1661.        \fi\fi
  1662.     \fi
  1663.     \hd@i=\V@int\seminhh
  1664.     \ifdim\E@a#1\E@e \global\E@a=\E@e\global\advance\E@a#2\hd@i
  1665.          \else    \global\E@e=\E@a\global\advance\E@e#2\hd@i\fi
  1666.   \fi
  1667.   }
  1668. %
  1669. %Postitionierung und Bogensatz
  1670. \def\caluphrase{\ifnum\V@int=0
  1671.   \caltie{0}{3}{+}\else \calphrase{<}{+}{0}\fi}
  1672. \def\callphrase{\ifnum\V@int=0
  1673.   \caltie{1}{3}{-}\else \calphrase{>}{-}{1}\fi}
  1674. \def\caltie#1#2#3{\hd@i=\E@a \hd@ii=\tieconst\seminhh
  1675.     \advance\hd@ii\nhh
  1676.     \advance\hd@i #3\hd@ii
  1677.     \additem{}{\noexpand\phrase{#1}{\the\H@e}%
  1678.            {#2}{#2}{\the\hd@i}{\the\slurcor}}\in\elementlist\at\n@a}
  1679. \def\calphrase#1#2#3{%
  1680.     \ifdim\V@#1 \z@
  1681.     \hd@i=\phraseconst\seminhh \advance\hd@i\nhh
  1682.     \global\advance\E@a#2\hd@i
  1683.        \additem{}{\noexpand\phrase{#3}{\the\H@e}%
  1684.           {0}{\the\V@int}{\the\E@a}{\the\slurcor}}\in\elementlist\at\n@a
  1685. %          0 entspr. slur aus der ersten spalte im font Sconst
  1686.     \else
  1687.     \hd@i=\phraseconst\seminhh \advance\hd@i\seminhh
  1688.     \global\advance\E@a by #2\hd@i\relax
  1689.     \hd@i=\V@int\seminhh
  1690.     \global\advance\E@a by #2\hd@i \relax
  1691.        \additem{}{\noexpand\phrase{#3}{\the\H@e}%
  1692.           {\the\V@int}{0}{\the\E@a}{\the\slurcor}}\in\elementlist\at\n@a
  1693. %                      0 entspr. slur aus der ersten spalte im font
  1694.     \fi}
  1695. \def\phrase#1#2#3#4#5#6{\hc@i=#3\hc@ii=#4%
  1696.      $\raise#5\hbox to \z@{{\kern#6%
  1697.   \ifcase#1
  1698.      \vt@@{\hbox to #2 {\slurfont
  1699.      \vt@@{\char\hex2\the\hc@i}\r@lef@ill{\p@}\vt@@{\char\hex3\the\hc@ii}}}%
  1700.   \or
  1701.      \vb@@{\hbox to #2 {\slurfont
  1702.      \vb@@{\char\hex4\the\hc@i}\r@lef@ll{\p@}\vb@@{\char\hex5\the\hc@ii}}}%
  1703.   \fi
  1704.    \hss}}$}
  1705. %
  1706. \def\setslurs#1#2{\additem{}{\noexpand\setslur{#2}{#1}%
  1707.    {\the\E@a}{\the\slurcor}{\the\slurtoks}}\in\elementlist\at\n@a}
  1708. \def\setslur#1#2#3#4#5{\S@=#1\hc@i=#2%
  1709.    $\raise#3\hbox to \z@{{\kern#4\relax
  1710.    \ifnum\S@<0 \vt@@{\selectfont\char#5}\else
  1711.                \vb@@{\selectfont\char#5}\fi
  1712.    \hss}}$}
  1713. \def\selectfont{%
  1714.    \ifcase\hc@i\ifnum\S@<0\slurfontdu\else\slurfontuu\fi%0
  1715.            \or \ifnum\S@<0\slurfontdd\else\slurfontud\fi%1
  1716.            \or \slurfont \or \slurfont \fi}
  1717. %       **************************************************              %
  1718. %       *    Akzente fuer    Noten und Akkorde           *              %
  1719. %       **************************************************              %
  1720. %Abkuerzungen
  1721. \def\cantusfirmus{{\it c.f.}}
  1722. \def\crescendo{{\it cresc.}}
  1723. \def\dacapo{{\it d.c.}}
  1724. \def\dalsegno{{\it d.s.}}
  1725. \def\decrescendo{{\it decresc.}}
  1726. \def\diminuendo{{\it dim.}}
  1727. \def\fine{{\it fine}}
  1728. \def\forte{{\it f}}
  1729. \def\fortissimo{{\it ff}}
  1730. \def\fortissimoposs{{\it fff}}
  1731. \def\fortepiano{{\it fp}}
  1732. \def\forzato{{\it fz}}
  1733. \def\mezzoforte{{\it mf}}
  1734. \def\mezzopiano{{\it mp}}
  1735. \def\piano{{\it p}}
  1736. \def\pianissimo{{\it pp}}
  1737. \def\pianissimoposs{{\it ppp}}
  1738. \def\rallentando{{\it rall.}}
  1739. \def\rinforzando{{\it rfz.}}
  1740. \def\ritardando{{\it rit.}}
  1741. \def\ritenuto{{\it riten.}}
  1742. \def\sforzato{{\it sfz}}
  1743. \def\sforz{{\it sf}}
  1744. \def\staccato{{\it stacc.}}
  1745. \def\tacet{{\it tacet}}
  1746. \def\unisono{{\it unis.}}
  1747. %Plazierung der Spielanweisungen am Notenkopf
  1748. \def\noaccent{\setbox\akzentbox\null}
  1749. \def\stac{\setbox\akzentbox\hboxnhw{{\rm.}}{\box\akzentbox}}
  1750. \def\dec{{{\slurfont\char'160}}}
  1751. \def\staccatissimo{\setbox\akzentbox%
  1752.   \hboxnhw{$\ssize\prime$}{\box\akzentbox}}
  1753. \def\tr{\setbox\akzentbox\hboxnhw{{\rm{\it tr}}}{\box\akzentbox}}
  1754. \def\trbrack{\setbox\akzentbox\hboxnhw{{\rm({\it tr})}}{\box\akzentbox}}
  1755. \def\tenuto{\setbox\akzentbox\hboxnhw{{\vrule width \nhh height 1pt}}
  1756. {\box\akzentbox}}
  1757. \def\plus{\setbox\akzentbox=
  1758.          \hboxnhw{$\scriptscriptstyle+$}{\box\akzentbox}}
  1759. \def\setchordakzent{%
  1760.   \ifdim\wd\akzentbox=\z@\relax\else
  1761.   \iftwo \akzent@position \else
  1762.   \ifstemup \l@akzent@position \else \u@akzent@position\fi \fi
  1763.   \ifstemup\global\setbox\notebox=\hbox{$
  1764.   \raise \akzent@pos\hbox to \z@{\copy\akzentbox\hss}$\box\notebox}\else
  1765.   \global\setbox\notebox=\hbox{\box\notebox$
  1766.   \raise \akzent@pos\hbox to\z@{\hss\copy\akzentbox}$}\fi\fi}
  1767. \def\setakzent{%
  1768.   \ifdim\wd\akzentbox=\z@\relax\else
  1769.   \iftwo \akzent@position \else
  1770.   \ifstemup \l@akzent@position \else \u@akzent@position\fi \fi
  1771.   \global\setbox\notebox=\hboxnhw{\box\notebox}{$
  1772.   \raise \akzent@pos\hbox{\copy\akzentbox}$}\fi}
  1773. \def\u@akzent@position{\hc@i=\ht\notebox \divide\hc@i by \seminhh
  1774.   \ifnum\hc@i>7 \advance\hc@i 1 \else
  1775.     \ifodd\hc@i \advance \hc@i 2 \else \advance \hc@i 1\fi\fi
  1776.   \akzent@pos = \hc@i\seminhh\relax
  1777.   \ifgroup
  1778.   \global\E@u=\akzent@pos \global\advance\E@u\ht\akzentbox
  1779.   \global\advance\E@u\seminhh
  1780.   \ifdim\E@u<\z@ \global\advance \E@u-\I@@
  1781.   \else \global\advance \E@u \I@@ \fi\fi
  1782.   }
  1783. \def\l@akzent@position{\hc@i=\dp\notebox \divide\hc@i by \seminhh
  1784.   \ifdim\dp\notebox>\z@ \advance\hc@i 1 \akzent@pos= -\hc@i\seminhh
  1785.   \else
  1786.     \ifnum\pitch>2 \akzent@pos=\seminhh \else \akzent@pos=-\seminhh\fi\fi
  1787.   \advance\akzent@pos-\ht\akzentbox
  1788.   \ifgroup
  1789.   \global\E@l=\akzent@pos \global\advance\E@l-\seminhh
  1790.   \ifdim\E@l<\z@ \global\advance \E@l-\I@@
  1791.   \else \global\advance \E@l \I@@ \fi\fi}
  1792. %varable (De-)Crescendo - Zeichen
  1793. \def\cresc#1{\sethunkglue\box\hunkbox\global\sk=0pt
  1794.   \setbox\hb@i\hbox{#1}\hc@i=\wd\hb@i\divide\hc@i\nhw
  1795.   \ifnum\hc@i < 1 \hc@i=1 \fi \ifnum\hc@i>16 \hc@i = 16\fi\advance\hc@i95
  1796.   \setover{\slurfont\char\the\hc@i}{\overstrut\unhbox\hb@i}}
  1797. \def\decresc#1{\sethunkglue\box\hunkbox\global\sk=0pt
  1798.   \setbox\hb@i\hbox{#1}\hc@i=\wd\hb@i\divide\hc@i\nhw
  1799.   \ifnum\hc@i < 1 \hc@i=1 \fi \ifnum\hc@i>16 \hc@i=16 \fi\advance\hc@i111
  1800.   \setover{\slurfont\char\the\hc@i}{\overstrut\unhbox\hb@i}}
  1801. \def\setover#1#2{\vbox{\offinterlineskip\hbox{#1}\hbox{#2}}}
  1802. %       **************************************************              %
  1803. %       *    Textunterlage                               *              %
  1804. %       **************************************************              %
  1805. %                 Text oberhalb und unterhalb der Notenlinien
  1806. %- Eingabemacros
  1807. \def\~#1#{\set@above@parms{#1}\set@above@box}
  1808. \def\_#1#{\set@below@parms{#1}\set@below@box}
  1809. \def\a@tok{\~}\def\b@tok{\_}
  1810. %#1 n : Der Text soll nicht in die Berechnung einbezogen werden,
  1811. %#1 c : Der Text wird unterhalb der Notenbox zentriert und  nicht in
  1812. % die weitere Berechnung einbezogen
  1813. %#1 l: (linksbuendig) aber neuer spaceskip festgesetzt, Box ist so breit
  1814. %wie Text.
  1815. %#1 r: (rechtsbuendig) Box ist so breit wie Notenbox + ihr spaceskip
  1816. %der Rest wird links ueberstehen. sk veraendert.
  1817. \def\set@above@parms#1{\def\aresp{#1}\ifx\aresp\empty \def\aresp{x}\fi
  1818.          \overtext=\staffheight\advance\overtext by\nhh}
  1819. \def\set@below@parms#1{\def\bresp{#1}\ifx\bresp\empty \def\bresp{x}\fi
  1820.           \undertext=\textline}
  1821. \def\set@above@box#1{\hs@iv=\sk\setbox\hb@i=\hbox{\global\sk=\z@skip
  1822.  \strut\eightrm#1}\get@below@box}
  1823. \def\get@below@box#1#{\def\@B@{#1}\begingroup\aftergroup\set@below
  1824.      \ifx\@B@\b@tok\relax %\aftergroup#2
  1825.      \else\aftergroup e\aftergroup{\aftergroup}\fi
  1826.      \endgroup}
  1827. \def\set@below#1#{\set@below@parms{#1}\set@boxes}
  1828. \def\set@boxes#1#2{\setbox\hb@ii=\hbox{\global\sk=\z@skip\strut\eightrm#1}%
  1829.   \global\sk=\hs@iv \setbox\hb@iii\hbox{#2}%
  1830.   \hs@v=\sk \relax\hs@vi=\sk
  1831.   \above{\aresp}\below{\bresp}\global\sk=\hs@iv\relax
  1832.   \ifvoid\hb@iii \global\sk=\z@skip \hbox{\u@text\l@text}\else #2\fi
  1833.   \ifdim\hs@vi>\hs@v\global\sk=\hs@vi\else\global\sk=\hs@v\fi
  1834.   \def\l@text{\relax}\def\u@text{\relax}}
  1835. %
  1836. \def\set@below@box#1{\hs@iv=\sk\setbox\hb@ii=\hbox{\global\sk=\z@skip
  1837.  \strut\eightrm#1}\get@above@box}
  1838. \def\get@above@box#1#{\def\@A@{#1}\begingroup\aftergroup\set@above
  1839.   \ifx\@A@\a@tok\relax%\aftergroup#2
  1840.   \else\aftergroup e\aftergroup{\aftergroup}\fi\endgroup}
  1841. \def\set@above#1#{\set@above@parms{#1}\set@@boxes}
  1842. \def\set@@boxes#1#2{\setbox\hb@i=\hbox{\global\sk=\z@skip\strut\eightrm#1}%
  1843.   \global\sk=\hs@iv \setbox\hb@iii\hbox{#2}%
  1844.   \hs@v=\sk \relax\hs@vi=\sk
  1845.   \above{\aresp}\below{\bresp}\global\sk=\hs@iv\relax
  1846.   \ifvoid\hb@iii\global\sk=\z@skip\hbox{\u@text\l@text}\else#2\fi
  1847.   \ifdim\hs@vi>\hs@v\global\sk=\hs@vi\else\global\sk=\hs@v\fi
  1848.   \def\l@text{\relax}\def\u@text{\relax}}
  1849. \def\above#1{\ifdim\ht\hb@iii>\overtext \overtext = \ht\hb@iii
  1850.   \advance \overtext \seminhh \fi
  1851.   \if#1e\def\u@text{\relax}\else
  1852.   \if#1n\anorespect\else
  1853.     \if#1c\acrespect\else
  1854.       \if#1r\arrespect\else
  1855.         \if#1l\alrespect\else\aautoset\fi\fi\fi\fi\fi\nobreak}
  1856. \def\below#1{%
  1857.   \if#1e\def\l@text{\relax}\else
  1858.   \if#1n\bnorespect\else
  1859.     \if#1c\bcrespect\else
  1860.       \if#1r\brrespect\else
  1861.         \if#1l\blrespect\else
  1862.           \if#1v\bvrespect\else\bautoset\fi\fi\fi\fi\fi\fi\nobreak}
  1863. \def\anorespect{%
  1864.    \def\u@text{$\raise\overtext\hbox to\z@{\box\hb@i\hss}$}}
  1865. \def\acrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv\relax
  1866.   \setbox\hb@i\hbox to\hd@i{\hss\box\hb@i\hss}%
  1867.   \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}}
  1868. \def\arrespect{\hd@i=\wd\hb@iii
  1869.   \advance\hd@i by \hs@v \advance\hd@i by-\hs@iv
  1870.   \setbox\hb@i\hbox to \hd@i{\hss\box\hb@i}%
  1871.   \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}%
  1872.   \advance\hs@v by \nhh plus\nhh\relax}
  1873. \def\alrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv
  1874.   \distance{\hd@i}{\wd\hb@i}\ifdim\hd@i>\wd\hb@i
  1875.   \hs@v=\Abs plus\nhh \fi
  1876.   \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}}
  1877. \def\bnorespect{%
  1878.   \def\l@text{$\lower\undertext\hbox to\z@{\box\hb@ii\hss}$}}
  1879. \def\bvrespect{\undertext=\ht\hb@ii\relax
  1880.   \ifdim\dp\hb@iii>\z@ \advance\undertext by\dp\hb@iii\fi\bnorespect}
  1881. \def\bcrespect{%
  1882.   \hd@i=\wd\hb@iii\advance\hd@i-\hs@iv\relax
  1883.   \setbox\hb@ii\hbox to\hd@i{\hss\box\hb@ii\hss}%
  1884.   \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}}
  1885. \def\brrespect{\hd@i=\wd\hb@iii
  1886.   \advance\hd@i by \hs@vi \advance\hd@i by-\hs@iv
  1887.   \setbox\hb@ii\hbox to \hd@i{\hss\box\hb@ii}%
  1888.   \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}%
  1889.   \advance\hs@vi by \nhh plus\nhh\relax}
  1890. \def\blrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv
  1891.   \distance{\hd@i}{\wd\hb@ii}\ifdim\hd@i>\wd\hb@i
  1892.   \hs@vi=\Abs plus\nhh\relax \fi
  1893.   \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}}
  1894. \def\aautoset{\hd@i=\wd\hb@i \advance \hd@i-\wd\hb@iii
  1895.   \advance\hd@i-\hs@iv
  1896.    \ifdim\hd@i>\z@ \relax
  1897.     \ifdim\hd@i>0.75\hs@v \advance\hd@i-\hs@v
  1898.       \ifdim\hd@i<\hs@v \arrespect\else\alrespect\fi
  1899.     \else\acrespect\fi
  1900.   \else\anorespect\fi
  1901.   }
  1902. \def\bautoset{\hd@i=\wd\hb@ii \advance\hd@i-\wd\hb@iii
  1903.   \advance\hd@i-\hs@vi
  1904.   \ifdim\hd@i>\z@ \relax
  1905.     \ifdim\hd@i>\sk \advance\hd@i-\sk
  1906.       \ifdim\hd@i<\sk \brrespect\else\blrespect\fi
  1907.     \else\bcrespect\fi
  1908.   \else\bnorespect\fi
  1909.   }
  1910. %       **************************************************              %
  1911. %       *    Zweistimmige Notation in einem System       *              %
  1912. %       **************************************************              %
  1913. \def\two#1#2{{\def\stemdirectiondef{\relax}\twotrue
  1914.   \setbox\h@nkbox=\hbox{\box\hunkbox}%
  1915.   \hs@i=\sk  \global\sk=\z@skip
  1916.   \setbox\firstvoice\hbox{\stemuptrue
  1917.   \let\akzent@position=\u@akzent@position\direction{up}#1}%
  1918.   \hs@ii=\sk \global\sk=\z@skip
  1919.   \setbox\secondvoice\hbox{%
  1920.     \def\doteven{\dot@down}\let\akzent@position=\l@akzent@position
  1921.   \stemupfalse\direction{down}#2}%
  1922.   \hs@iii=\sk
  1923.   \hbox{\global\sk=\hs@i\sethunkglue
  1924.     \box\h@nkbox\ifdim\wd\firstvoice<\wd\secondvoice
  1925.     \hd@i=\wd\firstvoice\global\sk=\z@skip\box\firstvoice\hskip-\hd@i
  1926.     \global\sk=\z@skip\box\secondvoice\global\sk=\hs@iii\else
  1927.     \hd@i=\wd\secondvoice\global\sk=\z@skip\box\secondvoice\hskip-\hd@i
  1928.     \global\sk=\z@skip\box\firstvoice\global\sk=\hs@ii\fi}\twofalse}}
  1929. %       **************************************************              %
  1930. %       *    Beginn    und Ende                          *              %
  1931. %       **************************************************              %
  1932. %Material fuer die Ueberschrift eines Musikstueckes
  1933. \def\comp@{\hbox{}} %Komponist
  1934. \def\poet@{\hbox{}} % Texter
  1935. \def\title@{\hbox{}}% Titel
  1936. \def\voice@{\hbox{}}%Text zu Beginn der ersten Notenzeile
  1937. \def\composer#1{\def\comp@{\hbox{\eightrm #1}}}
  1938. \def\poet#1{\def\poet@{\hbox{\eightrm#1}}}
  1939. \def\title#1{\def\title@{\hbox{\bf#1}}}
  1940. \def\voice#1{\def\voice@{\hbox to \parindent{\offinterlineskip
  1941.   \hss\vbox to \staffheight{\vfil\hbox{\rm#1}\vfil}\hss}}}
  1942. %Zusammensetzen der Ueberschrift
  1943. \def\headings{\par\hbox to \hsize{\hss\title@\hss}%
  1944.   \hbox to \hsize {\poet@\hss\comp@}%
  1945.   \def\comp@{\hbox{}}\def\poet@{\hbox{}}\def\title@{\hbox{}}}
  1946. %Rahmen \beginsong ...... \endsong
  1947. \outer\def\beginsong#1#2{\headings\par\nointerlineskip
  1948.   \begingroup\inisong
  1949.   \global\signtoks={}\global\cleftoks={}%
  1950.   \noaccent
  1951.   \baselines\parskip\staffheight plus 0.5\staffheight \relax
  1952.   \firsttrue\indent\llap{\voice@}%
  1953.   \firstlines#1#2\firstfalse\music}
  1954. \def\endsong{\break\null\par\endgroup\def\voice@{\hbox{}}\global\sk=0pt}
  1955. \outer\def\ende{\endsong\end}
  1956. %       **************************************************              %
  1957. %       *    Defaults                                    *              %
  1958. %       **************************************************              %
  1959. %Defaults zu Beginn des Musikstueckes
  1960. \def\inidefaults{\let\dotdown=\dot@down
  1961.   \def\helplist{}%
  1962.   \global\minsl=3 \nhh
  1963.   \let\na=\n@a \let\nee=\n@e
  1964.   \def\beamlist{\\{\the\n@a-\the\n@e,}}%
  1965. % Minimal moegliche Halslaenge bei Verbalkung - Anfangsbelegung
  1966.   \n@a=1}
  1967. %Diese k"onnen nicht in \beginsong .... \endsong eingebettet werden
  1968. %da sonst keine Aenderung moeglich
  1969.   \universal
  1970.   \normalbaselines
  1971. \catcode`@ = 12
  1972. %\let\baselines = \baselinesa   %fuer Einbettung einzeiliger Beispiele
  1973.                                %in Text
  1974. \let\baselines = \baselinesb  %fuer mehrzeilige Beispiele
  1975. \rm
  1976.  
  1977.